diff --git a/Day41-55/03.静态资源和Ajax请求.md b/Day41-55/03.静态资源和Ajax请求.md index e3bd4d0..c8b9e02 100644 --- a/Day41-55/03.静态资源和Ajax请求.md +++ b/Day41-55/03.静态资源和Ajax请求.md @@ -122,7 +122,7 @@ def show_subjects(request): -

所有学科

+

千锋互联所有学科信息


{% for subject in subjects %} @@ -167,7 +167,7 @@ def show_teachers(request): -

{{ subject.name }}的老师信息

+

{{ subject.name }}学科老师信息


{% if teachers %}
diff --git a/Day41-55/04.表单的应用.md b/Day41-55/04.表单的应用.md index 2780739..e2b6de1 100644 --- a/Day41-55/04.表单的应用.md +++ b/Day41-55/04.表单的应用.md @@ -62,7 +62,9 @@ python manage.py migrate ``` -注意,在上面的表单中,我们使用了模板指令`{% csrf_token %}`,它的作用是在表单中生成一个随机令牌(token)来防范[跨站请求伪造]()(通常简称为CSRF),这也是Django在提交表单时的硬性要求,除非我们专门设置了免除CSRF令牌。 +注意,在上面的表单中,我们使用了模板指令`{% csrf_token %}`为表单添加一个隐藏域(type属性值为hidden的input标签),它的作用是在表单中生成一个随机令牌(token)来防范[跨站请求伪造]()(通常简称为CSRF),这也是Django在提交表单时的硬性要求,除非我们专门设置了免除CSRF令牌。下图是一个关于CSRF简单生动的例子,它来自于[维基百科]()。 + +![](./res/CSRF.png) 用户在提交注册表单时,我们还需要对用户的输入进行验证,例如我们的网站要求用户名必须由字母、数字、下划线构成且长度在4-20个字符之间,密码的长度为8-20个字符,确认密码必须跟密码保持一致。这些验证操作首先可以通过浏览器中的JavaScript代码来完成,但是即便如此,在服务器端仍然要对用户输入再次进行验证来避免将无效的数据库交给数据库,因为用户可能会禁用浏览器的JavaScript功能,也有可能绕过浏览器的输入检查将注册数据提交给服务器,所以服务器端的用户输入检查仍然是必要的。 diff --git a/Day41-55/05.Cookie和Session.md b/Day41-55/05.Cookie和Session.md index 77e9a3c..2d19016 100644 --- a/Day41-55/05.Cookie和Session.md +++ b/Day41-55/05.Cookie和Session.md @@ -1,3 +1,4 @@ ## Cookie和Session +如今,一个网站如果不通过某种方式记住你是谁以及你之前在网站的活动情况,失去的就是网站的可用性和便利性,继而很有可能导致网站用户的流式,所以记住一个用户(更专业的说法叫**用户跟踪**)对绝大多数Web应用来说都是必需的功能。 diff --git a/Day41-55/res/CSRF.png b/Day41-55/res/CSRF.png new file mode 100644 index 0000000..6e87482 Binary files /dev/null and b/Day41-55/res/CSRF.png differ