@@ -52,11 +52,44 @@ def praise_or_criticize(request: HttpRequest):
52
52
53
53
> 注意:为了在登录成功之后能够回到刚才投票的页面,我们在跳转登录时设置了一个` backurl ` 参数,把当前浏览器中的URL作为返回的页面地址。
54
54
55
- 这样我们已经实现了用户必须登录才能投票的限制,但是一个新的问题来了。如果我们的应用中有很多功能都需要用户先登录才能执行,那么我们是不是需要在每个视图函数中添加代码来检查session中是否包含了登录用户的信息呢?答案是否定的,如果这样做了,我们的视图函数中必然会充斥着大量的重复代码。编程大师Martin Fowler曾经说过 :** 代码有很多种坏味道,重复是最坏的一种** 。我们可以把验证用户是否登录这样的代码放到Django的中间件中。
55
+ 这样我们已经实现了用户必须登录才能投票的限制,但是一个新的问题来了。如果我们的应用中有很多功能都需要用户先登录才能执行,那么我们是不是需要在每个视图函数中添加代码来检查session中是否包含了登录用户的信息呢?答案是否定的,如果这样做了,我们的视图函数中必然会充斥着大量的重复代码。编程大师 * Martin Fowler * 曾经说过 :** 代码有很多种坏味道,重复是最坏的一种** 。我们可以把验证用户是否登录这样的代码放到Django的中间件中。
56
56
57
57
### Django中间件概述
58
58
59
+ 中间件是安插在Web应用请求和响应过程之间的组件,它在整个Web应用中扮演了拦截过滤器的角色,通过中间件可以拦截请求和响应,并对请求和响应进行过滤(简单的说就是执行额外的处理)。通常,一个中间件组件只专注于完成一件特定的事,例如:Django框架通过` SessionMiddleware ` 中间件实现了对session的支持,又通过` AuthenticationMiddleware ` 中间件实现了基于session的请求认证。通过把多个中间件组合在一起,我们可以完成更为复杂的任务,Django框架就是这么做的。
59
60
61
+ Django项目的配置文件中就包含了对中间件的配置,代码如下所示。
62
+
63
+ ``` Python
64
+ MIDDLEWARE = [
65
+ ' django.middleware.security.SecurityMiddleware' ,
66
+ ' django.contrib.sessions.middleware.SessionMiddleware' ,
67
+ ' django.middleware.common.CommonMiddleware' ,
68
+ ' django.middleware.csrf.CsrfViewMiddleware' ,
69
+ ' django.contrib.auth.middleware.AuthenticationMiddleware' ,
70
+ ' django.contrib.messages.middleware.MessageMiddleware' ,
71
+ ' django.middleware.clickjacking.XFrameOptionsMiddleware' ,
72
+ ]
73
+ ```
74
+
75
+ 我们稍微为大家解释一下这些中间件的作用:
76
+
77
+ 1 . CommonMiddleware - 基础设置中间件,可以处理一下一些配置参数。
78
+ - DISALLOWED_USER_AGENTS - 不被允许的用户代理(浏览器)
79
+ - APPEND_SLASH - 是否追加` / `
80
+ - USE_ETAG - 浏览器缓存相关
81
+ 2 . SecurityMiddleware - 安全相关中间件,可以处理和安全相关的配置项。
82
+ - SECURE_HSTS_SECONDS - 强制使用HTTPS的时间
83
+ - SECURE_HSTS_INCLUDE_SUBDOMAINS - HTTPS是否覆盖子域名
84
+ - SECURE_CONTENT_TYPE_NOSNIFF - 是否允许浏览器推断内容类型
85
+ - SECURE_BROWSER_XSS_FILTER - 是否启用跨站脚本攻击过滤器
86
+ - SECURE_SSL_REDIRECT - 是否重定向到HTTPS连接
87
+ - SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS
88
+ 3 . SessionMiddleware - 会话中间件。
89
+ 4 . CsrfViewMiddleware - 通过生成令牌,防范跨请求份伪的造中间件。
90
+ 5 . XFrameOptionsMiddleware - 通过设置请求头参数,防范点击劫持攻击的中间件。
91
+
92
+ 在请求的过程中,上面的中间件会按照书写的顺序从上到下执行,最后请求才会来到视图函数中;在响应的过程中,上面的中间件会按照书写的顺序从下到上执行,与请求时中间件执行的顺序正好相反。
60
93
61
94
### 自定义中间件
62
95
0 commit comments