# 第一节:上下文处理器
# 上下文处理器
上下文处理器是可以返回一些数据,在全局模板中都可以使用。比如登录后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每个视图函数中都返回这个对象。
在`settings.TEMPLATES.OPTIONS.context_processors`中,有许多内置的上下文处理器。这些上下文处理器的作用如下:
1. `django.template.context_processors.debug`:增加一个`debug`和`sql_queries`变量。在模板中可以通过他来查看到一些数据库查询。
2. `django.template.context_processors.request`:增加一个`request`变量。这个`request`变量也就是在视图函数的第一个参数。
3. `django.contrib.auth.context_processors.auth`:`Django`有内置的用户系统,这个上下文处理器会增加一个`user`对象。
4. `django.contrib.messages.context_processors.messages`:增加一个`messages`变量。
5. `django.template.context_processors.media`:在模板中可以读取`MEDIA_URL`。比如想要在模板中使用上传的文件,那么这时候就需要使用`settings.py`中设置的`MEDIA_URL`来拼接`url`。示例代码如下:```
<pre class="calibre12">```
<span class="hljs-tag"><<span class="hljs-class">img</span> <span class="hljs-class">src</span>=<span class="hljs-string">""</span> /></span>
```
```
6. `django.template.context_processors.static`:在模板中可以使用`STATIC_URL`。
7. `django.template.context_processors.csrf`:在模板中可以使用`csrf_token`变量来生成一个`csrf token`。
## 自定义上下文处理器:
有时候我们想要返回自己的数据。那么这时候我们可以自定义上下文处理器。自定义上下文处理器的步骤如下:
1. 你可以根据这个上下文处理器是属于哪个`app`,然后在这个`app`中创建一个文件专门用来存储上下文处理器。比如`context_processors.py`。或者是你也可以专门创建一个`Python包`,用来存储所有的上下文处理器。
2. 在你定义的上下文处理器文件中,定义一个函数,这个函数只有一个`request`参数。这个函数中处理完自己的逻辑后,把需要返回给模板的数据,通过字典的形式返回。如果不需要返回任何数据,那么也必须返回一个空的字典。示例代码如下:```
<pre class="calibre12">```
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">frontuser</span><span class="hljs-params">(request)</span>:</span>
userid = request.session.get(<span class="hljs-string">"userid"</span>)
userModel = models.FrontendUser.objects.filter(pk=userid).first()
<span class="hljs-keyword">if</span> userModel:
<span class="hljs-keyword">return</span> {<span class="hljs-string">'frontuser'</span>:userModel}
<span class="hljs-keyword">else</span>:
<span class="hljs-keyword">return</span> {}
```
```
- Introduction
- 第一章:学前准备
- 第一节:虚拟环境
- 第二节:准备工作
- 第三节:Django介绍
- 第四节:URL组成部分
- 第二章:URL与视图
- 第一节:第一个Django项目
- 第二节:视图与URL分发器
- 第三章:模板
- 第一节:模板介绍
- 第二节:模板变量
- 第三节:常用标签
- 第四节:常用过滤器
- 第五节:自定义过滤器
- 第七节:模版结构优化
- 第八节:加载静态文件
- 第四章:数据库
- 第一节:MySQL相关软件
- 第二节:数据库操作
- 第三节:ORM模型
- 第四节:模型常用字段
- 第五节:外键和表关系
- 第六节:增删改查操作
- 第七节:查询操作
- 第八节:QuerySet API
- 第九节:ORM模型迁移
- 第十节:ORM作业
- 第十一节:ORM作业参考答案
- 第十二节:Pycharm连接数据库
- 第五章:视图高级
- 第一节:限制请求method
- 第二节:页面重定向
- 第三节:HttpRequest对象
- 第四节:HttpResponse对象
- 第五节:生成CSV文件
- 第六节:类视图
- 第七节:错误处理
- 第六章:表单
- 第一节:表单概述
- 第二节:用表单验证数据
- 第三节:ModelForm
- 第四节:文件上传
- 第七章:cookie和session
- 第八章:上下文处理器和中间件
- 第一节:上下文处理器
- 第二节:中间件
- 第九章:安全
- 第一节:CSRF攻击
- 第二节:XSS攻击
- 第三节:点击劫持攻击
- 第四节:SQL注入
- 第十章:信号
- 第一节:什么是信号
- 第十一章:验证和授权
- 第一节:概述
- 第二节:用户对象
- 第三节:权限和分组
- 第十二章:Admin系统
- 第十三章:Django的缓存
- 第十四章:memcached
- 第十五章:Redis