Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_44848235
Python-100-Days
提交
82306325
P
Python-100-Days
项目概览
weixin_44848235
/
Python-100-Days
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python-100-Days
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
82306325
编写于
5月 26, 2019
作者:
J
jackfrued
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新了Django第6天的文档
上级
a0641900
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
36 addition
and
1 deletion
+36
-1
.DS_Store
.DS_Store
+0
-0
Day41-55/06.中间件的应用.md
Day41-55/06.中间件的应用.md
+34
-1
Day91-100/Django知识点概述.md
Day91-100/Django知识点概述.md
+2
-0
未找到文件。
.DS_Store
浏览文件 @
82306325
无法预览此类型文件
Day41-55/06.中间件的应用.md
浏览文件 @
82306325
...
...
@@ -52,11 +52,44 @@ def praise_or_criticize(request: HttpRequest):
> 注意:为了在登录成功之后能够回到刚才投票的页面,我们在跳转登录时设置了一个`backurl`参数,把当前浏览器中的URL作为返回的页面地址。
这样我们已经实现了用户必须登录才能投票的限制,但是一个新的问题来了。如果我们的应用中有很多功能都需要用户先登录才能执行,那么我们是不是需要在每个视图函数中添加代码来检查session中是否包含了登录用户的信息呢?答案是否定的,如果这样做了,我们的视图函数中必然会充斥着大量的重复代码。编程大师
Martin Fowler
曾经说过:
**代码有很多种坏味道,重复是最坏的一种**
。我们可以把验证用户是否登录这样的代码放到Django的中间件中。
这样我们已经实现了用户必须登录才能投票的限制,但是一个新的问题来了。如果我们的应用中有很多功能都需要用户先登录才能执行,那么我们是不是需要在每个视图函数中添加代码来检查session中是否包含了登录用户的信息呢?答案是否定的,如果这样做了,我们的视图函数中必然会充斥着大量的重复代码。编程大师
*Martin Fowler*
曾经说过:
**代码有很多种坏味道,重复是最坏的一种**
。我们可以把验证用户是否登录这样的代码放到Django的中间件中。
### Django中间件概述
中间件是安插在Web应用请求和响应过程之间的组件,它在整个Web应用中扮演了拦截过滤器的角色,通过中间件可以拦截请求和响应,并对请求和响应进行过滤(简单的说就是执行额外的处理)。通常,一个中间件组件只专注于完成一件特定的事,例如:Django框架通过
`SessionMiddleware`
中间件实现了对session的支持,又通过
`AuthenticationMiddleware`
中间件实现了基于session的请求认证。通过把多个中间件组合在一起,我们可以完成更为复杂的任务,Django框架就是这么做的。
Django项目的配置文件中就包含了对中间件的配置,代码如下所示。
```
Python
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
```
我们稍微为大家解释一下这些中间件的作用:
1.
CommonMiddleware - 基础设置中间件,可以处理一下一些配置参数。
-
DISALLOWED_USER_AGENTS - 不被允许的用户代理(浏览器)
-
APPEND_SLASH - 是否追加
`/`
-
USE_ETAG - 浏览器缓存相关
2.
SecurityMiddleware - 安全相关中间件,可以处理和安全相关的配置项。
-
SECURE_HSTS_SECONDS - 强制使用HTTPS的时间
-
SECURE_HSTS_INCLUDE_SUBDOMAINS - HTTPS是否覆盖子域名
-
SECURE_CONTENT_TYPE_NOSNIFF - 是否允许浏览器推断内容类型
-
SECURE_BROWSER_XSS_FILTER - 是否启用跨站脚本攻击过滤器
-
SECURE_SSL_REDIRECT - 是否重定向到HTTPS连接
-
SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS
3.
SessionMiddleware - 会话中间件。
4.
CsrfViewMiddleware - 通过生成令牌,防范跨请求份伪的造中间件。
5.
XFrameOptionsMiddleware - 通过设置请求头参数,防范点击劫持攻击的中间件。
在请求的过程中,上面的中间件会按照书写的顺序从上到下执行,最后请求才会来到视图函数中;在响应的过程中,上面的中间件会按照书写的顺序从下到上执行,与请求时中间件执行的顺序正好相反。
### 自定义中间件
Day91-100/Django知识点概述.md
浏览文件 @
82306325
## Django知识点概述
> 说明:本文的部分插图来自于《Python项目开发实战》和《精通Django》,这两本书中都包含了对Django框架精彩的讲解,有兴趣的读者可以自行购买阅读。
### Web应用
问题1:描述一个Web应用的工作流程。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录