From 27474271aeee73bfbcd98f4e260d7d82b398a2ff Mon Sep 17 00:00:00 2001 From: jackfrued Date: Mon, 29 Jun 2020 12:02:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Day41-55/44.Cookie和Session.md | 581 ++++++++++++++++++ Day41-55/44.表单的应用.md | 485 --------------- Day41-55/45.Cookie和Session.md | 194 ------ Day41-55/res/csrf-simple.png | Bin 0 -> 188941 bytes Day66-75/70.解析动态内容.md | 2 +- Day66-75/71.表单交互和验证码处理.md | 32 - README.md | 20 +- 7 files changed, 589 insertions(+), 725 deletions(-) create mode 100644 Day41-55/44.Cookie和Session.md delete mode 100644 Day41-55/44.表单的应用.md delete mode 100644 Day41-55/45.Cookie和Session.md create mode 100644 Day41-55/res/csrf-simple.png delete mode 100644 Day66-75/71.表单交互和验证码处理.md diff --git a/Day41-55/44.Cookie和Session.md b/Day41-55/44.Cookie和Session.md new file mode 100644 index 0000000..809fcd4 --- /dev/null +++ b/Day41-55/44.Cookie和Session.md @@ -0,0 +1,581 @@ +## Cookie和Session + +我们继续来完成上一章节中的项目,实现“用户登录”的功能,并限制只有登录的用户才能投票。 + +### 用户登录的准备工作 + +我们先为实现用户登录做一些准备工作。 + +1. 创建用户模型。之前我们讲解过如果通过Django的ORM实现从二维表到模型的转换(反向工程),这次我们尝试把模型变成二维表(正向工程)。 + + ```Python + class User(models.Model): + """用户""" + no = models.AutoField(primary_key=True, verbose_name='编号') + username = models.CharField(max_length=20, unique=True, verbose_name='用户名') + password = models.CharField(max_length=32, verbose_name='密码') + tel = models.CharField(max_length=20, verbose_name='手机号') + reg_date = models.DateTimeField(auto_now_add=True, verbose_name='注册时间') + last_visit = models.DateTimeField(null=True, verbose_name='最后登录时间') + + class Meta: + db_table = 'tb_user' + verbose_name = '用户' + verbose_name_plural = '用户' + ``` + +2. 使用下面的命令生成迁移文件并执行迁移,将`User`模型直接变成关系型数据库中的二维表`tb_user`。 + + ```Bash + python manage.py makemigrations polls + python manage.py migrate polls + ``` + +3. 用下面的SQL语句直接插入两条测试数据,通常不能讲用户的密码直接保存在数据库中,因此我们将用户密码处理成对应的MD5摘要。MD5消息摘要算法是一种被广泛使用的密码哈希函数(散列函数),可以产生出一个128位(比特)的哈希值(散列值),用于确保信息传输完整一致。在使用哈希值时,通常会将哈希值表示为16进制字符串,因此128位的MD5摘要通常表示为32个十六进制符号。 + + ```SQL + insert into `tb_user` + (`username`, `password`, `tel`, `reg_date`) + values + ('wangdachui', '1c63129ae9db9c60c3e8aa94d3e00495', '13122334455', now()), + ('hellokitty', 'c6f8cf68e5f68b0aa4680e089ee4742c', '13890006789', now()); + ``` + + > **说明**:上面创建的两个用户`wangdachui`和`hellokitty`密码分别是`1qaz2wsx`和`Abc123!!`。 + +4. 我们在应用下增加一个名为`utils.py`的模块用来保存需要使用的工具函数。Python标准库中的`hashlib`模块封装了常用的哈希算法,包括:MD5、SHA1、SHA256等。下面是使用`hashlib`中的`md5`类将字符串处理成MD5摘要的函数如下所示。 + + ```Python + import hashlib + + + def gen_md5_digest(content): + return hashlib.md5(content.encode()).hexdigest() + ``` + +5. 编写用户登录的视图函数和模板页。 + + 添加渲染登录页面的视图函数: + + ```Python + def login(request: HttpRequest) -> HttpResponse: + hint = '' + return render(request, 'login.html', {'hint': hint}) + ``` + + 增加`login.html`模板页: + + ```HTML + + + + + 用户登录 + + + +
+

用户登录

+
+

{{ hint }}

+
+ {% csrf_token %} +
+ 用户信息 +
+ + +
+
+ + +
+
+ + + +
+
+
+ + +
+
+
+ 返回首页 + 注册新用户 +
+
+ + + ``` + + 注意,在上面的表单中,我们使用了模板指令`{% csrf_token %}`为表单添加一个隐藏域(大家可以在浏览器中显示网页源代码就可以看到这个指令生成的`type`属性为`hidden`的`input`标签),它的作用是在表单中生成一个随机令牌(token)来防范[跨站请求伪造]()(简称为CSRF),这也是Django在提交表单时的硬性要求。如果我们的表单中没有这样的令牌,那么提交表单时,Django框架会产生一个响应状态码为`403`的响应(禁止访问),除非我们设置了免除CSRF令牌。下图是一个关于CSRF简单生动的例子。 + + ![](./res/csrf-simple.png) + +接下来,我们可以编写提供验证码和实现用户登录的视图函数,在此之前,我们先说说一个Web应用实现用户跟踪的方式以及Django框架对实现用户跟踪所提供的支持。对一个Web应用来说,用户登录成功后必然要让服务器能够记住该用户已经登录,这样服务器才能为这个用户提供更好的服务,而且上面说到的CSRF也是通过钓鱼网站来套取用户登录信息进行恶意操作的攻击手段,这些都是以用户跟踪技术为基础的。在理解了这些背景知识后,我们就清楚用户登录时到底需要执行哪些操作。 + +### 实现用户跟踪 + +如今,一个网站如果不通过某种方式记住你是谁以及你之前在网站的活动情况,失去的就是网站的可用性和便利性,继而很有可能导致网站用户的流式,所以记住一个用户(更专业的说法叫**用户跟踪**)对绝大多数Web应用来说都是必需的功能。 + +在服务器端,我们想记住一个用户最简单的办法就是创建一个对象,通过这个对象就可以把用户相关的信息都保存起来,这个对象就是我们常说的session(用户会话对象)。那么问题来了,HTTP本身是一个**无连接**(每次请求和响应的过程中,服务器一旦完成对客户端请求的响应之后就断开连接)、**无状态**(客户端再次发起对服务器的请求时,服务器无法得知这个客户端之前的任何信息)的协议,即便服务器通过session对象保留了用户数据,还得通过某种方式来确定当前的请求与之前保存过的哪一个session是有关联的。相信很多人都能想到,我们可以给每个session对象分配一个全局唯一的标识符来识别session对象,我们姑且称之为sessionid,每次客户端发起请求时,只要携带上这个sessionid,就有办法找到与之对应的session对象,从而实现在两次请求之间记住该用户的信息,也就是我们之前说的用户跟踪。 + +要让客户端记住并在每次请求时带上sessionid又有以下几种做法: + +1. URL重写。所谓URL重写就是在URL中携带sessionid,例如:`http://www.example.com/index.html?sessionid=123456`,服务器通过获取sessionid参数的值来取到与之对应的session对象。 + +2. 隐藏域(隐式表单域)。在提交表单的时候,可以通过在表单中设置隐藏域向服务器发送额外的数据。例如:``。 + +3. 本地存储。现在的浏览器都支持多种本地存储方案,包括:cookie、localStorage、sessionStorage、IndexedDB等。在这些方案中,cookie是历史最为悠久也是被诟病得最多的一种方案,也是我们接下来首先为大家讲解的一种方案。简单的说,cookie是一种以键值对方式保存在浏览器临时文件中的数据,每次请求时,请求头中会携带本站点的cookie到服务器,那么只要将sessionid写入cookie,下次请求时服务器只要读取请求头中的cookie就能够获得这个sessionid,如下图所示。 + + ![](./res/sessionid_from_cookie.png) + + 在HTML5时代要,除了cookie,还可以使用新的本地存储API来保存数据,就是刚才提到的localStorage、sessionStorage、IndexedDB等技术,如下图所示。 + + ![](./res/cookie_xstorage_indexeddb.png) + +**总结一下**,要实现用户跟踪,服务器端可以为每个用户会话创建一个session对象并将session对象的ID写入到浏览器的cookie中;用户下次请求服务器时,浏览器会在HTTP请求头中携带该网站保存的cookie信息,这样服务器就可以从cookie中找到session对象的ID并根据此ID获取到之前创建的session对象;由于session对象可以用键值对的方式保存用户数据,这样之前保存在session对象中的信息可以悉数取出,服务器也可以根据这些信息判定用户身份和了解用户偏好,为用户提供更好的个性化服务。 + +### Django框架对session的支持 + +在创建Django项目时,默认的配置文件`settings.py`文件中已经激活了一个名为`SessionMiddleware`的中间件(关于中间件的知识我们在后面的章节做详细讲解,这里只需要知道它的存在即可),因为这个中间件的存在,我们可以直接通过请求对象的`session`属性来操作会话对象。前面我们说过,`session`属性是一个像字典一样可以读写数据的容器对象,因此我们可以使用“键值对”的方式来保留用户数据。与此同时,`SessionMiddleware`中间件还封装了对cookie的操作,在cookie中保存了sessionid,这一点我们在上面已经提到过了。 + +在默认情况下,Django将session的数据序列化后保存在关系型数据库中,在Django 1.6以后的版本中,默认的序列化数据的方式是JSON序列化,而在此之前一直使用Pickle序列化。JSON序列化和Pickle序列化的差别在于前者将对象序列化为字符串(字符形式),而后者将对象序列化为字节串(二进制形式),因为安全方面的原因,JSON序列化成为了目前Django框架默认序列化数据的方式,这就要求在我们保存在session中的数据必须是能够JSON序列化的,否则就会引发异常。还有一点需要说明的是,使用关系型数据库保存session中的数据在大多数时候并不是最好的选择,因为数据库可能会承受巨大的压力而成为系统性能的瓶颈,在后面的章节中我们会告诉大家如何将session保存到缓存服务中以提升系统的性能。 + +### 实现用户登录验证 + +首先,我们在刚才的`polls/utils.py`文件中编写生成随机验证码的函数`gen_random_code`,内容如下所示。 + +```Python +import random + +ALL_CHARS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + + +def gen_random_code(length=4): + return ''.join(random.choices(ALL_CHARS, k=length)) +``` + +编写生成验证码图片的类`Captcha`。 + +```Python +""" +图片验证码 +""" +import os +import random +from io import BytesIO + +from PIL import Image +from PIL import ImageFilter +from PIL.ImageDraw import Draw +from PIL.ImageFont import truetype + + +class Bezier: + """贝塞尔曲线""" + + def __init__(self): + self.tsequence = tuple([t / 20.0 for t in range(21)]) + self.beziers = {} + + def make_bezier(self, n): + """绘制贝塞尔曲线""" + try: + return self.beziers[n] + except KeyError: + combinations = pascal_row(n - 1) + result = [] + for t in self.tsequence: + tpowers = (t ** i for i in range(n)) + upowers = ((1 - t) ** i for i in range(n - 1, -1, -1)) + coefs = [c * a * b for c, a, b in zip(combinations, + tpowers, upowers)] + result.append(coefs) + self.beziers[n] = result + return result + + +class Captcha: + """验证码""" + + def __init__(self, width, height, fonts=None, color=None): + self._image = None + self._fonts = fonts if fonts else \ + [os.path.join(os.path.dirname(__file__), 'fonts', font) + for font in ['Arial.ttf', 'Georgia.ttf', 'Action.ttf']] + self._color = color if color else random_color(0, 200, random.randint(220, 255)) + self._width, self._height = width, height + + @classmethod + def instance(cls, width=200, height=75): + """用于获取Captcha对象的类方法""" + prop_name = f'_instance_{width}_{height}' + if not hasattr(cls, prop_name): + setattr(cls, prop_name, cls(width, height)) + return getattr(cls, prop_name) + + def _background(self): + """绘制背景""" + Draw(self._image).rectangle([(0, 0), self._image.size], + fill=random_color(230, 255)) + + def _smooth(self): + """平滑图像""" + return self._image.filter(ImageFilter.SMOOTH) + + def _curve(self, width=4, number=6, color=None): + """绘制曲线""" + dx, height = self._image.size + dx /= number + path = [(dx * i, random.randint(0, height)) + for i in range(1, number)] + bcoefs = Bezier().make_bezier(number - 1) + points = [] + for coefs in bcoefs: + points.append(tuple(sum([coef * p for coef, p in zip(coefs, ps)]) + for ps in zip(*path))) + Draw(self._image).line(points, fill=color if color else self._color, width=width) + + def _noise(self, number=50, level=2, color=None): + """绘制扰码""" + width, height = self._image.size + dx, dy = width / 10, height / 10 + width, height = width - dx, height - dy + draw = Draw(self._image) + for i in range(number): + x = int(random.uniform(dx, width)) + y = int(random.uniform(dy, height)) + draw.line(((x, y), (x + level, y)), + fill=color if color else self._color, width=level) + + def _text(self, captcha_text, fonts, font_sizes=None, drawings=None, squeeze_factor=0.75, color=None): + """绘制文本""" + color = color if color else self._color + fonts = tuple([truetype(name, size) + for name in fonts + for size in font_sizes or (65, 70, 75)]) + draw = Draw(self._image) + char_images = [] + for c in captcha_text: + font = random.choice(fonts) + c_width, c_height = draw.textsize(c, font=font) + char_image = Image.new('RGB', (c_width, c_height), (0, 0, 0)) + char_draw = Draw(char_image) + char_draw.text((0, 0), c, font=font, fill=color) + char_image = char_image.crop(char_image.getbbox()) + for drawing in drawings: + d = getattr(self, drawing) + char_image = d(char_image) + char_images.append(char_image) + width, height = self._image.size + offset = int((width - sum(int(i.size[0] * squeeze_factor) + for i in char_images[:-1]) - + char_images[-1].size[0]) / 2) + for char_image in char_images: + c_width, c_height = char_image.size + mask = char_image.convert('L').point(lambda i: i * 1.97) + self._image.paste(char_image, + (offset, int((height - c_height) / 2)), + mask) + offset += int(c_width * squeeze_factor) + + @staticmethod + def _warp(image, dx_factor=0.3, dy_factor=0.3): + """图像扭曲""" + width, height = image.size + dx = width * dx_factor + dy = height * dy_factor + x1 = int(random.uniform(-dx, dx)) + y1 = int(random.uniform(-dy, dy)) + x2 = int(random.uniform(-dx, dx)) + y2 = int(random.uniform(-dy, dy)) + warp_image = Image.new( + 'RGB', + (width + abs(x1) + abs(x2), height + abs(y1) + abs(y2))) + warp_image.paste(image, (abs(x1), abs(y1))) + width2, height2 = warp_image.size + return warp_image.transform( + (width, height), + Image.QUAD, + (x1, y1, -x1, height2 - y2, width2 + x2, height2 + y2, width2 - x2, -y1)) + + @staticmethod + def _offset(image, dx_factor=0.1, dy_factor=0.2): + """图像偏移""" + width, height = image.size + dx = int(random.random() * width * dx_factor) + dy = int(random.random() * height * dy_factor) + offset_image = Image.new('RGB', (width + dx, height + dy)) + offset_image.paste(image, (dx, dy)) + return offset_image + + @staticmethod + def _rotate(image, angle=25): + """图像旋转""" + return image.rotate(random.uniform(-angle, angle), + Image.BILINEAR, expand=1) + + def generate(self, captcha_text='', fmt='PNG'): + """生成验证码(文字和图片) + :param captcha_text: 验证码文字 + :param fmt: 生成的验证码图片格式 + :return: 验证码图片的二进制数据 + """ + self._image = Image.new('RGB', (self._width, self._height), (255, 255, 255)) + self._background() + self._text(captcha_text, self._fonts, + drawings=['_warp', '_rotate', '_offset']) + self._curve() + self._noise() + self._smooth() + image_bytes = BytesIO() + self._image.save(image_bytes, format=fmt) + return image_bytes.getvalue() + + +def pascal_row(n=0): + """生成毕达哥拉斯三角形(杨辉三角)""" + result = [1] + x, numerator = 1, n + for denominator in range(1, n // 2 + 1): + x *= numerator + x /= denominator + result.append(x) + numerator -= 1 + if n & 1 == 0: + result.extend(reversed(result[:-1])) + else: + result.extend(reversed(result)) + return result + + +def random_color(start=0, end=255, opacity=255): + """获得随机颜色""" + red = random.randint(start, end) + green = random.randint(start, end) + blue = random.randint(start, end) + if opacity is None: + return red, green, blue + return red, green, blue, opacity +``` + +> **说明**:上面的代码中用到了三个字体文件,字体文件位于`polls/fonts`目录下,大家可以自行添加字体文件,但是需要注意字体文件的文件名跟上面代码的第45行保持一致。 + +接下来,我们先完成提供验证码的视图函数。 + +```Python +def get_captcha(request: HttpRequest) -> HttpResponse: + """验证码""" + captcha_text = gen_random_code() + request.session['captcha'] = captcha_text + image_data = Captcha.instance().generate(captcha_text) + return HttpResponse(image_data, content_type='image/png') +``` + +注意上面代码中的第4行,我们将随机生成的验证码字符串保存到session中,稍后用户登录时,我们要将保存在session中的验证码字符串和用户输入的验证码字符串进行比对,如果用户输入了正确的验证码才能够执行后续的登录流程,代码如下所示。 + +```Python +def login(request: HttpRequest) -> HttpResponse: + hint = '' + if request.method == 'POST': + username = request.POST.get('username') + password = request.POST.get('password') + if username and password: + password = gen_md5_digest(password) + user = User.objects.filter(username=username, password=password).first() + if user: + request.session['userid'] = user.no + request.session['username'] = user.username + return redirect('/') + else: + hint = '用户名或密码错误' + else: + hint = '请输入有效的用户名和密码' + return render(request, 'login.html', {'hint': hint}) +``` + +>**说明**:上面的代码没有对用户名和密码没有进行验证,实际项目中建议使用正则表达式验证用户输入信息,否则有可能将无效的数据交给数据库进行处理或者造成其他安全方面的隐患。 + +上面的代码中,我们设定了登录成功后会在session中保存用户的编号(`userid`)和用户名(`username`),页面会重定向到首页。接下来我们可以稍微对首页的代码进行调整,在页面的右上角显示出登录用户的用户名。我们将这段代码单独写成了一个名为header.html的HTML文件,首页中可以通过在``标签中添加`{% include 'header.html' %}`来包含这个页面,代码如下所示。 + +```HTML +
+ {% if request.session.userid %} + {{ request.session.username }} + 注销 + {% else %} + 登录   + {% endif %} + 注册 +
+``` + +如果用户没有登录,页面会显示登录和注册的超链接;而用户登录成功后,页面上会显示用户名和注销的链接,注销链接对应的视图函数如下所示,URL的映射与之前讲过的类似,不再赘述。 + +```Python +def logout(request): + """注销""" + request.session.flush() + return redirect('/') +``` + +上面的代码通过session对象`flush`方法来销毁session,一方面清除了服务器上session对象保存的用户数据,一方面将保存在浏览器cookie中的sessionid删除掉,稍后我们会对如何读写cookie的操作加以说明。 + +我们可以通过项目使用的数据库中名为`django_session` 的表来找到所有的session,该表的结构如下所示: + +| session_key | session_data | expire_date | +| -------------------------------- | ------------------------------- | -------------------------- | +| c9g2gt5cxo0k2evykgpejhic5ae7bfpl | MmI4YzViYjJhOGMyMDJkY2M5Yzg3... | 2019-05-25 23:16:13.898522 | + +其中,第1列就是浏览器cookie中保存的sessionid;第2列是经过BASE64编码后的session中的数据,如果使用Python的`base64`对其进行解码,解码的过程和结果如下所示。 + +```Python +import base64 + +base64.b64decode('MmI4YzViYjJhOGMyMDJkY2M5Yzg3ZWIyZGViZmUzYmYxNzdlNDdmZjp7ImNhcHRjaGEiOiJzS3d0Iiwibm8iOjEsInVzZXJuYW1lIjoiamFja2ZydWVkIn0=') +``` + +第3列是session的过期时间,session过期后浏览器保存的cookie中的sessionid就会失效,但是数据库中的这条对应的记录仍然会存在,如果想清除过期的数据,可以使用下面的命令。 + +```Shell +python manage.py clearsessions +``` + +Django框架默认的session过期时间为两周(1209600秒),如果想修改这个时间,可以在项目的配置文件中添加如下所示的代码。 + +```Python +# 配置会话的超时时间为1天(86400秒) +SESSION_COOKIE_AGE = 86400 +``` + +有很多对安全性要求较高的应用都必须在关闭浏览器窗口时让会话过期,不再保留用户的任何信息,如果希望在关闭浏览器窗口时就让会话过期(cookie中的sessionid失效),可以加入如下所示的配置。 + +```Python +# 设置为True在关闭浏览器窗口时session就过期 +SESSION_EXPIRE_AT_BROWSER_CLOSE = True +``` + +如果不希望将session的数据保存在数据库中,可以将其放入缓存中,对应的配置如下所示,缓存的配置和使用我们在后面讲解。 + +```Python +# 配置将会话对象放到缓存中存储 +SESSION_ENGINE = 'django.contrib.sessions.backends.cache' +# 配置使用哪一组缓存来保存会话 +SESSION_CACHE_ALIAS = 'default' +``` + +如果要修改session数据默认的序列化方式,可以将默认的`JSONSerializer`修改为`PickleSerializer`。 + +```Python +SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' +``` + +接下来,我们就可以限制只有登录用户才能为老师投票,修改后的`praise_or_criticize`函数如下所示,我们通过从`request.session`中获取`userid`来判定用户是否登录。 + +```Python +def praise_or_criticize(request: HttpRequest) -> HttpResponse: + if request.session.get('userid'): + try: + tno = int(request.GET.get('tno')) + teacher = Teacher.objects.get(no=tno) + if request.path.startswith('/praise/'): + teacher.good_count += 1 + count = teacher.good_count + else: + teacher.bad_count += 1 + count = teacher.bad_count + teacher.save() + data = {'code': 20000, 'mesg': '投票成功', 'count': count} + except (ValueError, Teacher.DoesNotExist): + data = {'code': 20001, 'mesg': '投票失败'} + else: + data = {'code': 20002, 'mesg': '请先登录'} + return JsonResponse(data) +``` + +当然,在修改了视图函数后,`teachers.html`也需要进行调整,用户如果没有登录,就将用户引导至登录页,登录成功再返回到投票页,此处不再赘述。 + +### 在视图函数中读写cookie + +下面我们对如何使用cookie做一个更为细致的说明以便帮助大家在Web项目中更好的使用这项技术。Django封装的`HttpRequest`和`HttpResponse`对象分别提供了读写cookie的操作。 + +HttpRequest封装的属性和方法: + +1. `COOKIES`属性 - 该属性包含了HTTP请求携带的所有cookie。 +2. `get_signed_cookie`方法 - 获取带签名的cookie,如果签名验证失败,会产生`BadSignature`异常。 + +HttpResponse封装的方法: + +1. `set_cookie`方法 - 该方法可以设置一组键值对并将其最终将写入浏览器。 +2. `set_signed_cookie`方法 - 跟上面的方法作用相似,但是会对cookie进行签名来达到防篡改的作用。因为如果篡改了cookie中的数据,在不知道[密钥]()和[盐]()的情况下是无法生成有效的签名,这样服务器在读取cookie时会发现数据与签名不一致从而产生`BadSignature`异常。需要说明的是,这里所说的密钥就是我们在Django项目配置文件中指定的`SECRET_KEY`,而盐是程序中设定的一个字符串,你愿意设定为什么都可以,只要是一个有效的字符串。 + +上面提到的方法,如果不清楚它们的具体用法,可以自己查阅一下Django的[官方文档](),没有什么资料比官方文档能够更清楚的告诉你这些方法到底如何使用。 + +刚才我们说过了,激活`SessionMiddleware`之后,每个`HttpRequest`对象都会绑定一个session属性,它是一个类似字典的对象,除了保存用户数据之外还提供了检测浏览器是否支持cookie的方法,包括: + +1. `set_test_cookie`方法 - 设置用于测试的cookie。 +2. `test_cookie_worked`方法 - 检测测试cookie是否工作。 +3. `delete_test_cookie`方法 - 删除用于测试的cookie。 +4. `set_expiry`方法 - 设置会话的过期时间。 +5. `get_expire_age`/`get_expire_date`方法 - 获取会话的过期时间。 +6. `clear_expired`方法 - 清理过期的会话。 + +下面是在执行登录之前检查浏览器是否支持cookie的代码。通常情况下,浏览器默认开启了对cookie的支持,但是可能因为某种原因,用户禁用了浏览器的cookie功能,遇到这种情况我们可以在视图函数中提供一个检查功能,如果检查到用户浏览器不支持cookie,可以给出相应的提示。 + +```Python +def login(request): + if request.method == 'POST': + if request.session.test_cookie_worked(): + request.session.delete_test_cookie() + # Add your code to perform login process here + else: + return HttpResponse("Please enable cookies and try again.") + request.session.set_test_cookie() + return render_to_response('login.html') +``` + +### Cookie的替代品 + +之前我们说过了,cookie的名声一直都不怎么好,当然我们在实际开发中是不会在cookie中保存用户的敏感信息(如用户的密码、信用卡的账号等)的,而且保存在cookie中的数据一般也会做好编码和签名的工作。对于支持HTML5的浏览器来说,可以使用localStorage和sessionStorage做为cookie的替代方案,相信从名字上你就能听出二者的差别,存储在`localStorage`的数据可以长期保留;而存储在`sessionStorage`的数据会在浏览器关闭时会被清除 。关于这些cookie替代品的用法,建议大家查阅[MDN]()来进行了解。 \ No newline at end of file diff --git a/Day41-55/44.表单的应用.md b/Day41-55/44.表单的应用.md deleted file mode 100644 index 6029615..0000000 --- a/Day41-55/44.表单的应用.md +++ /dev/null @@ -1,485 +0,0 @@ -## 表单的应用 - -Django框架中提供了对表单的封装,而且提供了多种不同的使用方式。 - -首先添加用户模型。 - -```Python -class User(models.Model): - """用户""" - no = models.AutoField(primary_key=True, verbose_name='编号') - username = models.CharField(max_length=20, unique=True, verbose_name='用户名') - password = models.CharField(max_length=32, verbose_name='密码') - regdate = models.DateTimeField(auto_now_add=True, verbose_name='注册时间') - - class Meta: - db_table = 'tb_user' - verbose_name_plural = '用户' -``` - -通过生成迁移和执行迁移操作,在数据库中创建对应的用户表。 - -```Shell -(venv)$ python manage.py makemigrations vote -... -(venv)$ python manage.py migrate -... -``` - -定制一个非常简单的注册模板页面。 - -```HTML - - - - - 用户注册 - - - -

用户注册

-
-

{{ hint }}

-
- {% csrf_token %} -
- - -
-
- - -
-
- - -
-
- - -
-
- 返回登录 - - -``` - -注意,在上面的表单中,我们使用了模板指令`{% csrf_token %}`为表单添加一个隐藏域(type属性值为hidden的input标签),它的作用是在表单中生成一个随机令牌(token)来防范[跨站请求伪造]()(通常简称为CSRF),这也是Django在提交表单时的硬性要求,除非我们设置了免除CSRF令牌。下图是一个关于CSRF简单生动的例子,它来自于[维基百科]()。 - -![](./res/CSRF.png) - -用户在提交注册表单时,我们还需要对用户的输入进行验证,例如我们的网站要求用户名必须由字母、数字、下划线构成且长度在4-20个字符之间,密码的长度为8-20个字符,确认密码必须跟密码保持一致。这些验证操作首先可以通过浏览器中的JavaScript代码来完成,但是即便如此,在服务器端仍然要对用户输入再次进行验证来避免将无效的数据库交给数据库,因为用户可能会禁用浏览器的JavaScript功能,也有可能绕过浏览器的输入检查将注册数据提交给服务器,所以服务器端的用户输入检查仍然是必要的。 - -我们可以利用Django框架封装的表单功能来对用户输入的有效性进行检查,虽然Django封装的表单还能帮助我们定制出页面上的表单元素,但这显然是一种灵活性很差的设计,这样的功能在实际开发中基本不考虑,所以表单主要的作用就在于数据验证,具体的做法如下所示。 - -```Python -USERNAME_PATTERN = re.compile(r'\w{4,20}') - -class RegisterForm(forms.ModelForm): - repassword = forms.CharField(min_length=8, max_length=20) - - def clean_username(self): - username = self.cleaned_data['username'] - if not USERNAME_PATTERN.fullmatch(username): - raise ValidationError('用户名由字母、数字和下划线构成且长度为4-20个字符') - return username - - def clean_password(self): - password = self.cleaned_data['password'] - if len(password) < 8 or len(password) > 20: - raise ValidationError('无效的密码,密码长度为8-20个字符') - return to_md5_hex(self.cleaned_data['password']) - - def clean_repassword(self): - repassword = to_md5_hex(self.cleaned_data['repassword']) - if repassword != self.cleaned_data['password']: - raise ValidationError('密码和确认密码不一致') - return repassword - - class Meta: - model = User - exclude = ('no', 'regdate') -``` - -上面,我们定义了一个与User模型绑定的表单(继承自ModelForm),我们排除了用户编号(no)和注册日期(regdate)这两个属性,并添加了一个repassword属性用来接收从用户表单传给服务器的确认密码。我们在定义User模型时已经对用户名的最大长度进行了限制,上面我们又对确认密码的最小和最大长度进行了限制,但是这些都不足以完成我们对用户输入的验证。上面以`clean_`打头的方法就是我们自定义的验证规则。很明显,`clean_username`是对用户名的检查,而`clean_password`是对密码的检查。由于数据库二维表中不应该保存密码的原文,所以对密码做了一个简单的MD5摘要处理,实际开发中如果只做出这样的处理还不太够,因为即便使用了摘要,仍然有利用彩虹表反向查询破解用户密码的风险,如何做得更好我们会在后续的内容中讲到。为字符串生成MD5摘要的代码如下所示。 - -```Python -def to_md5_hex(message): - return hashlib.md5(message.encode()).hexdigest() -``` - -新增一个视图函数实现用户注册的功能。 - -```Python -def register(request): - page, hint = 'register.html', '' - if request.method == 'POST': - form = RegisterForm(request.POST) - if form.is_valid(): - form.save() - page = 'login.html' - hint = '注册成功,请登录' - else: - hint = '请输入有效的注册信息' - return render(request, page, {'hint': hint}) -``` - -如果用户发起GET请求,将直接跳转到注册的页面;如果用户以POST方式提交注册表单,则创建自定义的注册表单对象并获取用户输入。可以通过表单对象的`is_valid`方法对表单进行验证,如果用户输入没有问题,该方法返回True,否则返回False;由于我们定义的RegisterForm继承自ModelForm,因此也可以直接使用表单对象的`save`方法来保存模型。下面是注册请求的URL配置。 - -```Python -from django.contrib import admin -from django.urls import path - -from vote import views - -urlpatterns = [ - # 此处省略上面的代码 - path('register/', views.register, name='register'), - # 此处省略下面的代码 -] -``` - -> 说明:`path`函数可以通过name参数给URL绑定一个逆向解析的名字,也就是说,如果需要可以从后面给的名字逆向解析出对应的URL。 - -我们再来定制一个非常简单的登录页。 - -```HTML - - - - - 用户登录 - - - -

用户登录

-
-

{{ hint }}

-
- {% csrf_token %} -
- - -
-
- - -
-
- - - -
-
- - -
-
- 注册新用户 - - -``` - -上面的登录页中,我们要求用户提供验证码,验证码全称是**全自动区分计算机和人类的公开图灵测试**,它是一种用来区分系统的使用者是计算机还是人类的程序。简单的说就是程序出一个只有人类能够回答的问题,由系统使用者来解答,由于计算机理论上无法解答程序提出的问题,所以回答出问题的用户就可以被认为是人类。大多数的网站都使用了不同类型的验证码技术来防范用程序自动注册用户或模拟用户登录(暴力破解用户密码),因为验证码具有一次消费性,而没有通过图灵测试的程序是不能够完成注册或登录的。 - -在Python程序中生成验证码并不算特别复杂,但需要三方库Pillow的支持(PIL的分支),因为要对验证码图片进行旋转、扭曲、拉伸以及加入干扰信息来防范那些用OCR(光学文字识别)破解验证码的程序。下面的代码封装了生成验证码图片的功能,大家可以直接用这些代码来生成图片验证码,不要“重复发明轮子”。 - -```Python -""" -图片验证码 -""" -import os -import random - -from io import BytesIO - -from PIL import Image -from PIL import ImageFilter -from PIL.ImageDraw import Draw -from PIL.ImageFont import truetype - - -class Bezier(object): - """贝塞尔曲线""" - - def __init__(self): - self.tsequence = tuple([t / 20.0 for t in range(21)]) - self.beziers = {} - - def make_bezier(self, n): - """绘制贝塞尔曲线""" - try: - return self.beziers[n] - except KeyError: - combinations = pascal_row(n - 1) - result = [] - for t in self.tsequence: - tpowers = (t ** i for i in range(n)) - upowers = ((1 - t) ** i for i in range(n - 1, -1, -1)) - coefs = [c * a * b for c, a, b in zip(combinations, - tpowers, upowers)] - result.append(coefs) - self.beziers[n] = result - return result - - -class Captcha(object): - """验证码""" - - def __init__(self, width, height, fonts=None, color=None): - self._image = None - self._fonts = fonts if fonts else \ - [os.path.join(os.path.dirname(__file__), 'fonts', font) - for font in ['ArialRB.ttf', 'ArialNI.ttf', 'Georgia.ttf', 'Kongxin.ttf']] - self._color = color if color else random_color(0, 200, random.randint(220, 255)) - self._width, self._height = width, height - - @classmethod - def instance(cls, width=200, height=75): - prop_name = f'_instance_{width}_{height}' - if not hasattr(cls, prop_name): - setattr(cls, prop_name, cls(width, height)) - return getattr(cls, prop_name) - - def background(self): - """绘制背景""" - Draw(self._image).rectangle([(0, 0), self._image.size], - fill=random_color(230, 255)) - - def smooth(self): - """平滑图像""" - return self._image.filter(ImageFilter.SMOOTH) - - def curve(self, width=4, number=6, color=None): - """绘制曲线""" - dx, height = self._image.size - dx /= number - path = [(dx * i, random.randint(0, height)) - for i in range(1, number)] - bcoefs = Bezier().make_bezier(number - 1) - points = [] - for coefs in bcoefs: - points.append(tuple(sum([coef * p for coef, p in zip(coefs, ps)]) - for ps in zip(*path))) - Draw(self._image).line(points, fill=color if color else self._color, width=width) - - def noise(self, number=50, level=2, color=None): - """绘制扰码""" - width, height = self._image.size - dx, dy = width / 10, height / 10 - width, height = width - dx, height - dy - draw = Draw(self._image) - for i in range(number): - x = int(random.uniform(dx, width)) - y = int(random.uniform(dy, height)) - draw.line(((x, y), (x + level, y)), - fill=color if color else self._color, width=level) - - def text(self, captcha_text, fonts, font_sizes=None, drawings=None, squeeze_factor=0.75, color=None): - """绘制文本""" - color = color if color else self._color - fonts = tuple([truetype(name, size) - for name in fonts - for size in font_sizes or (65, 70, 75)]) - draw = Draw(self._image) - char_images = [] - for c in captcha_text: - font = random.choice(fonts) - c_width, c_height = draw.textsize(c, font=font) - char_image = Image.new('RGB', (c_width, c_height), (0, 0, 0)) - char_draw = Draw(char_image) - char_draw.text((0, 0), c, font=font, fill=color) - char_image = char_image.crop(char_image.getbbox()) - for drawing in drawings: - d = getattr(self, drawing) - char_image = d(char_image) - char_images.append(char_image) - width, height = self._image.size - offset = int((width - sum(int(i.size[0] * squeeze_factor) - for i in char_images[:-1]) - - char_images[-1].size[0]) / 2) - for char_image in char_images: - c_width, c_height = char_image.size - mask = char_image.convert('L').point(lambda i: i * 1.97) - self._image.paste(char_image, (offset, int((height - c_height) / 2)), mask) - offset += int(c_width * squeeze_factor) - - @staticmethod - def warp(image, dx_factor=0.3, dy_factor=0.3): - """图像扭曲""" - width, height = image.size - dx = width * dx_factor - dy = height * dy_factor - x1 = int(random.uniform(-dx, dx)) - y1 = int(random.uniform(-dy, dy)) - x2 = int(random.uniform(-dx, dx)) - y2 = int(random.uniform(-dy, dy)) - warp_image = Image.new('RGB', (width + abs(x1) + abs(x2), height + abs(y1) + abs(y2))) - warp_image.paste(image, (abs(x1), abs(y1))) - width2, height2 = warp_image.size - return warp_image.transform((width, height), Image.QUAD, - (x1, y1, -x1, height2 - y2, width2 + x2, height2 + y2, width2 - x2, -y1) - ) - - @staticmethod - def offset(image, dx_factor=0.1, dy_factor=0.2): - """图像偏移""" - width, height = image.size - dx = int(random.random() * width * dx_factor) - dy = int(random.random() * height * dy_factor) - offset_image = Image.new('RGB', (width + dx, height + dy)) - offset_image.paste(image, (dx, dy)) - return offset_image - - @staticmethod - def rotate(image, angle=25): - """图像旋转""" - return image.rotate(random.uniform(-angle, angle), Image.BILINEAR, expand=1) - - def generate(self, captcha_text='', fmt='PNG'): - """生成验证码(文字和图片)""" - self._image = Image.new('RGB', (self._width, self._height), (255, 255, 255)) - self.background() - self.text(captcha_text, self._fonts, drawings=['warp', 'rotate', 'offset']) - self.curve() - self.noise() - self.smooth() - image_bytes = BytesIO() - self._image.save(image_bytes, format=fmt) - return image_bytes.getvalue() - - -def pascal_row(n=0): - """生成Pascal三角第n行""" - result = [1] - x, numerator = 1, n - for denominator in range(1, n // 2 + 1): - x *= numerator - x /= denominator - result.append(x) - numerator -= 1 - if n & 1 == 0: - result.extend(reversed(result[:-1])) - else: - result.extend(reversed(result)) - return result - - -def random_color(start=0, end=255, opacity=255): - """获得随机颜色""" - red = random.randint(start, end) - green = random.randint(start, end) - blue = random.randint(start, end) - if opacity is None: - return red, green, blue - return red, green, blue, opacity -``` - -> **说明**:上面的代码在生成验证码图片时用到了三种字体文件,使用上面的代码时需要添加字体文件到应用目录下的fonts目录中。 - -下面的视图函数用来生成验证码并通过HttpResponse对象输出到用户浏览器中。 - -```Python -ALL_CHARS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' - - -def get_captcha_text(length=4): - selected_chars = random.choices(ALL_CHARS, k=length) - return ''.join(selected_chars) - - -def get_captcha(request): - """获得验证码""" - captcha_text = get_captcha_text() - image = Captcha.instance().generate(captcha_text) - return HttpResponse(image, content_type='image/png') -``` - -生成的验证码如下图所示。 - -![](./res/captcha.png) - -为了验证用户提交的登录表单,我们再定义个表单类。 - -```Python -class LoginForm(forms.Form): - username = forms.CharField(min_length=4, max_length=20) - password = forms.CharField(min_length=8, max_length=20) - captcha = forms.CharField(min_length=4, max_length=4) - - def clean_username(self): - username = self.cleaned_data['username'] - if not USERNAME_PATTERN.fullmatch(username): - raise ValidationError('无效的用户名') - return username - - def clean_password(self): - return to_md5_hex(self.cleaned_data['password']) -``` - -跟之前我们定义的注册表单类略有区别,登录表单类直接继承自Form没有跟模型绑定,定义了三个字段分别对应登录表单中的用户名、密码和验证码。接下来是处理用户登录的视图函数。 - -```Python -def login(request): - hint = '' - if request.method == 'POST': - form = LoginForm(request.POST) - if form.is_valid(): - username = form.cleaned_data['username'] - password = form.cleaned_data['password'] - user = User.objects.filter(username=username, password=password).first() - if user: - return redirect('/') - else: - hint = '用户名或密码错误' - else: - hint = '请输入有效的登录信息' - return render(request, 'login.html', {'hint': hint}) -``` - -映射URL。 - -```Python -from django.contrib import admin -from django.urls import path - -from vote import views - -urlpatterns = [ - # 此处省略上面的代码 - path('login/', views.login, name='login'), - # 此处省略下面的代码 -] -``` - -需要指出,上面我们设定用户登录成功时直接返回首页,而且在用户登录时并没有验证用户输入的验证码是否正确,这些我们留到下一个单元再为大家讲解。另外,如果要在Django自带的管理后台中进行表单验证,可以在admin.py的模型管理类中指定`form`属性为自定义的表单即可,例如: - -```Python -class UserForm(forms.ModelForm): - password = forms.CharField(min_length=8, max_length=20, - widget=forms.PasswordInput, label='密码') - - def clean_username(self): - username = self.cleaned_data['username'] - if not USERNAME_PATTERN.fullmatch(username): - raise ValidationError('用户名由字母、数字和下划线构成且长度为4-20个字符') - return username - - def clean_password(self): - password = self.cleaned_data['password'] - return to_md5_hex(self.cleaned_data['password']) - - class Meta: - model = User - exclude = ('no', ) - - -class UserAdmin(admin.ModelAdmin): - list_display = ('no', 'username', 'password', 'email', 'tel') - ordering = ('no', ) - form = UserForm - list_per_page = 10 - - -admin.site.register(User, UserAdmin) -``` \ No newline at end of file diff --git a/Day41-55/45.Cookie和Session.md b/Day41-55/45.Cookie和Session.md deleted file mode 100644 index f23c28d..0000000 --- a/Day41-55/45.Cookie和Session.md +++ /dev/null @@ -1,194 +0,0 @@ -## Cookie和Session - -我们继续来完成上一章节中的项目,实现“用户登录”的功能,并限制只有登录的用户才能投票。 - -### 实现用户登录 - -1. 创建用户模型。之前我们讲解过如果通过Django的ORM实现从二维表到模型的转换(反向工程),这次我们尝试把模型变成二维表(正向工程)。 -2. 使用下面的命令生成迁移文件并执行迁移,将`User`模型直接变成关系型数据库中的二维表`tb_user`。 -3. 用下面的SQL语句直接插入两条测试数据,通常不能讲用户的密码直接保存在数据库中,因此我们将用户密码处理成对应的MD5摘要。MD5消息摘要算法是一种被广泛使用的密码哈希函数(散列函数),可以产生出一个128位(比特)的哈希值(散列值),用于确保信息传输完整一致。在使用哈希值时,通常会将哈希值表示为16进制字符串,因此128位的MD5摘要通常表示为32个十六进制符号。 -4. 编写用户登录的模板页。 - -### 实现用户跟踪 - -如今,一个网站如果不通过某种方式记住你是谁以及你之前在网站的活动情况,失去的就是网站的可用性和便利性,继而很有可能导致网站用户的流式,所以记住一个用户(更专业的说法叫**用户跟踪**)对绝大多数Web应用来说都是必需的功能。 - -在服务器端,我们想记住一个用户最简单的办法就是创建一个对象,通过这个对象就可以把用户相关的信息都保存起来,这个对象就是我们常说的session(用户会话对象)。那么问题来了,HTTP本身是一个无连接(每次请求和响应的过程中,服务器一旦完成对客户端请求的响应之后就断开连接)、无状态(客户端再次发起对服务器的请求时,服务器无法得知这个客户端之前的任何信息)的协议,即便服务器通过session对象保留了用户数据,还得通过某种方式来确定当前的请求与之前保存过的哪一个session是有关联的。相信很多人都能想到,我们可以给每个session对象分配一个全局唯一的标识符来识别session对象,我们姑且称之为sessionid,每次客户端发起请求时,只要携带上这个sessionid,就有办法找到与之对应的session对象,从而实现在两次请求之间记住该用户的信息,也就是我们之前说的用户跟踪。 - -要让客户端记住并在每次请求时带上sessionid又有以下几种做法: - -1. URL重写。所谓URL重写就是在URL中携带sessionid,例如:`http://www.example.com/index.html?sessionid=123456`,服务器通过获取sessionid参数的值来取到与之对应的session对象。 - -2. 隐藏域(隐式表单域)。在提交表单的时候,可以通过在表单中设置隐藏域向服务器发送额外的数据。例如:``。 - -3. 本地存储。现在的浏览器都支持多种本地存储方案,包括:cookie、localStorage、sessionStorage、IndexedDB等。在这些方案中,cookie是历史最为悠久也是被诟病得最多的一种方案,也是我们接下来首先为大家讲解的一种方案。简单的说,cookie是一种以键值对方式保存在浏览器临时文件中的数据,每次请求时,请求头中会携带本站点的cookie到服务器,那么只要将sessionid写入cookie,下次请求时服务器只要读取请求头中的cookie就能够获得这个sessionid,如下图所示。 - - ![](./res/sessionid_from_cookie.png) - - 在HTML5时代要,除了cookie,还可以使用新的本地存储API来保存数据,就是刚才提到的localStorage、sessionStorage、IndexedDB等技术,如下图所示。 - - ![](./res/cookie_xstorage_indexeddb.png) - -### Django框架对session的支持 - -在创建Django项目时,默认的配置文件`settings.py`文件中已经激活了一个名为`SessionMiddleware`的中间件(关于中间件的知识我们在下一个章节做详细的讲解,这里只需要知道它的存在即可),因为这个中间件的存在,我们可以直接通过请求对象的`session`属性来操作会话对象。`session`属性是一个像字典一样可以读写数据的容器对象,因此我们可以使用“键值对”的方式来保留用户数据。与此同时,`SessionMiddleware`中间件还封装了对cookie的操作,在cookie中保存了sessionid,就如同我们之前描述的那样。 - -在默认情况下,Django将session的数据序列化后保存在关系型数据库中,在Django 1.6以后的版本中,默认的序列化数据的方式是JSON序列化,而在此之前一直使用Pickle序列化。JSON序列化和Pickle序列化的差别在于前者将对象序列化为字符串(字符形式),而后者将对象序列化为字节串(二进制形式),因为安全方面的原因,JSON序列化成为了目前Django框架默认序列化数据的方式,这就要求在我们保存在session中的数据必须是能够JSON序列化的,否则就会引发异常。还有一点需要说明的是,使用关系型数据库保存session中的数据在大多数时候并不是最好的选择,因为数据库可能会承受巨大的压力而成为系统性能的瓶颈,在后面的章节中我们会告诉大家如何将session的数据保存到缓存服务中。 - -我们继续完善之前的投票应用,前一个章节中我们实现了用户的登录和注册,下面我们首先完善登录时对验证码的检查。 - -```Python -def get_captcha(request): - """验证码""" - captcha_text = random_captcha_text() - request.session['captcha'] = captcha_text - image_data = Captcha.instance().generate(captcha_text) - return HttpResponse(image_data, content_type='image/png') -``` - -注意上面代码中的第4行,我们将随机生成的验证码字符串保存到session中,稍后用户登录时,我们要将保存在session中的验证码字符串和用户输入的验证码字符串进行比对,如果用户输入了正确的验证码才能够执行后续的登录流程,代码如下所示。 - -```Python -def login(request: HttpRequest): - """登录""" - hint = '' - if request.method == 'POST': - form = LoginForm(request.POST) - if form.is_valid(): - # 对验证码的正确性进行验证 - captcha_from_user = form.cleaned_data['captcha'] - captcha_from_sess = request.session.get('captcha', '') - if captcha_from_sess.lower() != captcha_from_user.lower(): - hint = '请输入正确的验证码' - else: - username = form.cleaned_data['username'] - password = form.cleaned_data['password'] - user = User.objects.filter(username=username, password=password).first() - if user: - # 登录成功后将用户编号和用户名保存在session中 - request.session['userid'] = user.no - request.session['username'] = user.username - return redirect('/') - else: - hint = '用户名或密码错误' - else: - hint = '请输入有效的登录信息' - return render(request, 'login.html', {'hint': hint}) -``` - -上面的代码中,我们设定了登录成功后会在session中保存用户的编号(`userid`)和用户名(`username`),页面会重定向到首页。接下来我们可以稍微对首页的代码进行调整,在页面的右上角显示出登录用户的用户名。我们将这段代码单独写成了一个名为header.html的HTML文件,首页中可以通过在``标签中添加`{% include 'header.html' %}`来包含这个页面,代码如下所示。 - -```HTML -
- {% if request.session.userid %} - {{ request.session.username }} - 注销 - {% else %} - 登录   - {% endif %} - 注册 -
-``` - -如果用户没有登录,页面会显示登录和注册的超链接;而用户登录成功后,页面上会显示用户名和注销的链接,注销链接对应的视图函数如下所示,URL的映射与之前讲过的类似,不再赘述。 - -```Python -def logout(request): - """注销""" - request.session.flush() - return redirect('/') -``` - -上面的代码通过session对象`flush`方法来销毁session,一方面清除了服务器上session对象保存的用户数据,一方面将保存在浏览器cookie中的sessionid删除掉,稍后我们会对如何读写cookie的操作加以说明。 - -我们可以通过项目使用的数据库中名为`django_session` 的表来找到所有的session,该表的结构如下所示: - -| session_key | session_data | expire_date | -| -------------------------------- | ------------------------------- | -------------------------- | -| c9g2gt5cxo0k2evykgpejhic5ae7bfpl | MmI4YzViYjJhOGMyMDJkY2M5Yzg3... | 2019-05-25 23:16:13.898522 | - -其中,第1列就是浏览器cookie中保存的sessionid;第2列是经过BASE64编码后的session中的数据,如果使用Python的`base64`对其进行解码,解码的过程和结果如下所示。 - -```Python ->>> import base64 ->>> base64.b64decode('MmI4YzViYjJhOGMyMDJkY2M5Yzg3ZWIyZGViZmUzYmYxNzdlNDdmZjp7ImNhcHRjaGEiOiJzS3d0Iiwibm8iOjEsInVzZXJuYW1lIjoiamFja2ZydWVkIn0=') -'2b8c5bb2a8c202dcc9c87eb2debfe3bf177e47ff:{"captcha":"sKwt","no":1,"username":"jackfrued"}' -``` - -第3列是session的过期时间,session过期后浏览器保存的cookie中的sessionid就会失效,但是数据库中的这条对应的记录仍然会存在,如果想清除过期的数据,可以使用下面的命令。 - -```Shell -python manage.py clearsessions -``` - -Django框架默认的session过期时间为两周(1209600秒),如果想修改这个时间,可以在项目的配置文件中添加如下所示的代码。 - -```Python -# 配置会话的超时时间为1天(86400秒) -SESSION_COOKIE_AGE = 86400 -``` - -有很多对安全性要求较高的应用都必须在关闭浏览器窗口时让会话过期,不再保留用户的任何信息,如果希望在关闭浏览器窗口时就让会话过期(cookie中的sessionid失效),可以加入如下所示的配置。 - -```Python -# 设置为True在关闭浏览器窗口时session就过期 -SESSION_EXPIRE_AT_BROWSER_CLOSE = True -``` - -如果不希望将session的数据保存在数据库中,可以将其放入缓存中,对应的配置如下所示,缓存的配置和使用我们在后面讲解。 - -```Python -# 配置将会话对象放到缓存中存储 -SESSION_ENGINE = 'django.contrib.sessions.backends.cache' -# 配置使用哪一组缓存来保存会话 -SESSION_CACHE_ALIAS = 'default' -``` - -如果要修改session数据默认的序列化方式,可以将默认的`JSONSerializer`修改为`PickleSerializer`。 - -```Python -SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' -``` - -### 在视图函数中读写cookie - -Django封装的`HttpRequest`和`HttpResponse`对象分别提供了读写cookie的操作。 - -HttpRequest封装的属性和方法: - -1. `COOKIES`属性 - 该属性包含了HTTP请求携带的所有cookie。 -2. `get_signed_cookie`方法 - 获取带签名的cookie,如果签名验证失败,会产生`BadSignature`异常。 - -HttpResponse封装的方法: - -1. `set_cookie`方法 - 该方法可以设置一组键值对并将其最终将写入浏览器。 -2. `set_signed_cookie`方法 - 跟上面的方法作用相似,但是会对cookie进行签名来达到防篡改的作用。因为如果篡改了cookie中的数据,在不知道[密钥]()和[盐]()的情况下是无法生成有效的签名,这样服务器在读取cookie时会发现数据与签名不一致从而产生`BadSignature`异常。需要说明的是,这里所说的密钥就是我们在Django项目配置文件中指定的`SECRET_KEY`,而盐是程序中设定的一个字符串,你愿意设定为什么都可以,只要是一个有效的字符串。 - -上面提到的方法,如果不清楚它们的具体用法,可以自己查阅一下Django的[官方文档](),没有什么资料比官方文档能够更清楚的告诉你这些方法到底如何使用。 - -刚才我们说过了,激活`SessionMiddleware`之后,每个`HttpRequest`对象都会绑定一个session属性,它是一个类似字典的对象,除了保存用户数据之外还提供了检测浏览器是否支持cookie的方法,包括: - -1. `set_test_cookie`方法 - 设置用于测试的cookie。 -2. `test_cookie_worked`方法 - 检测测试cookie是否工作。 -3. `delete_test_cookie`方法 - 删除用于测试的cookie。 -4. `set_expiry`方法 - 设置会话的过期时间。 -5. `get_expire_age`/`get_expire_date`方法 - 获取会话的过期时间。 -6. `clear_expired`方法 - 清理过期的会话。 - -下面是在执行登录之前检查浏览器是否支持cookie的代码。 - -```Python -def login(request): - if request.method == 'POST': - if request.session.test_cookie_worked(): - request.session.delete_test_cookie() - # Add your code to perform login process here - else: - return HttpResponse("Please enable cookies and try again.") - request.session.set_test_cookie() - return render_to_response('login.html') -``` - -### Cookie的替代品 - -之前我们说过了,cookie的名声一直都不怎么好,当然我们在实际开发中是不会在cookie中保存用户的敏感信息(如用户的密码、信用卡的账号等)的,而且保存在cookie中的数据一般也会做好编码和签名的工作。即便如此,HTML5中还是给出了用于替代cookie的技术方案,其中使用得最为广泛的就是localStorage和sessionStorage,相信从名字上你就能听出二者的差别,存储在`localStorage`的数据可以长期保留;而存储在`sessionStorage`的数据会在浏览器关闭时会被清除 。关于这些cookie替代品的用法,建议大家查阅[MDN]()来进行了解。 \ No newline at end of file diff --git a/Day41-55/res/csrf-simple.png b/Day41-55/res/csrf-simple.png new file mode 100644 index 0000000000000000000000000000000000000000..067ccd47974b0b996c47930926b0fa661b71f366 GIT binary patch literal 188941 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
F-`H*v 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%0Dg&*%W4WrUEHiHW$k6PDI!SSwcK`sF*aB{mC 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