上下文处理器_内置上下文处理器

Django内置的上下文处理器

1、上下文处理器是属于模板的,所以在TEMPLATES当中的context_processors
    ⑴Django中的Context Processor主要是应用于模板,完成页面的绘制的一些处理,也就是所说的页面渲染

2、在settings.TEMPLATES.OPTIONS.context_processors中(也就是前面我们刚才添加上下文处理器的位置),有许多内置的上下文处理器。这些上下文处理器的作用如下

3、不管是内置的上下文处理器还是自定义的上下文处理器都记住:上下文处理器的结果与视图函数没有任何关系
    ⑴上下文处理器的返回结果与视图函数的返回结果之间没有任何关系:两者之间无任何联系,两个结果是分别返回的
    ⑵不管访问哪个URL,都会执行URL本身对应的视图函数和上下文处理器函数
    ⑶只是说如果模板中用到了上下文处理器的结果,那么就会在模板中显示对应的结果,如果模板中没有用到上下文处理器的结果,那么就不会显示(上下文处理器依旧会执行和返回结果,只是模板中没有用到)
    ⑷上下文处理器返回的数据与视图函数的request对象和response对象都无任何关系:不会影响到视图函数的request对象和response对象(上下文)

4、上下文处理器的处理结果(上下文)是作用于模板的
    

 

常见的内置上下文处理器

上下文处理器   描述
django.template.context_processors.debug增加一个debug和sql_queries变量。在模板中可以通过他来查看到一些数据库查询
django.template.context_processors.request 增加一个request变量。这个request变量也就是在视图函数的第一个参数。正是因为有了这个上下文处理器,我们才能从request中获取数据
django.contrib.auth.context_processors.authDjango有内置的用户系统,这个上下文处理器会增加一个user对象(所以在自定义上下文处理器时最好不要将函数名定义为user)
django.contrib.messages.context_processors.messages 增加一个messages变量。可以通过它来存放一些我们需要返回的错误信息
django.template.context_processors.media 在模板中可以读取MEDIA_URL。比如想要在模板中使用上传的文件,那么这时候就需要使用settings.py中设置的MEDIA_URL来拼接url
django.template.context_processors.static 在模板中可以使用static_url
django.template.context_processors.csrf在模板中可以使用csrf_token变量来生成一个csrf token

例1:

 

 

debug上下文处理器

1、作用:增加一个debug和sql_queries变量。在模板中可以通过他来查看到一些数据库查询语句信息

2、这个debug上下文处理器主要是用于查看数据库查询SQL信息的,所以需要在视图函数中执行对应的查询操作

例2:
⑴查看源码

⑵设置配置信息

⑶编写视图

⑷编辑模板

⑸访问

 

request上下文处理器

1、作用:增加一个request变量。这个request变量也就是在视图函数的第一个参数。正是因为有了这个上下文处理器,我们才能从request中获取数据并直接传递给模板

2、就是可以将request中的一些数据直接传递给模板,而不需要我们自己在视图函数中从request对象中获取数据再传递给模板
    ⑴上下文处理器传递过来的是一个request对象,因此需要再通过request对象的属性来获取具体的值

例3:
⑴查看源码

⑵编辑视图

⑶编辑模板

⑷访问

 

auth上下文处理器

1、作用:Django有内置的用户系统,这个上下文处理器会增加一个user对象

2、所以在自定义上下文处理器时最好不要将函数名定义为user或返回一个user对象了,避免冲突

例4:
⑴查看源码

 

messages上下文处理器

1、作用:增加一个messages变量。可以通过它来存放一些我们需要返回的错误信息,并传递给所有模板

2、比如:用户在登录时,如果用户名或密码错误,那么就需要在模板中渲染对应的一个错误信息。这个错误信息就可以通过messages上下文处理器来返回

3、这里就以前面我们自定义上下文处理器中的【登录】为例

例5:一般处理方式
⑴查看表单

⑵查看视图函数

⑶重新编辑视图函数:重新渲染模板并传递错误信息上下文

⑷(或)编辑模板:使用URL跳转,但是使用跳转的话好像不能传递错误信息上下文了

⑸重新编辑模板

⑹首次访问登录页面

⑺登录失败:登录失败后就重新渲染login页面并渲染错误信息(也可以跳转到login页面,只是感觉重新渲染要好点)


例5_1:使用messages上下文处理器
⑴编辑视图函数:这里就可以使用URL跳转了,错误信息变量是全局的(与视图函数无关系),都能获取到错误信息变量

⑵编辑模板

⑶访问

注:
1、使用messages上下文处理器时需要先导入对应的模块:from django.contrib import messages

2、使用messages模块下面的add_message()方法来增加一个错误信息

3、add_message()语法:add_message(request, level, message, extra_tags='', fail_silently=False)

4、参数:
    ⑴request:第一个参数必须是request
    ⑵level:表示错误信息级别,messages.INFO,messages.DEBUG,messages.WARNING,messages.ERROR等
    ⑶message:需要返回的错误信息
5、感觉这个messages上下文处理器:主要是用于返回表单验证错误信息(向模板传递表单验证错误信息)

6、感觉使用messages上下文处理器会把错误信息写死,就是说不管什么原因导致验证失败了,都只会返回add_message()中指定的错误信息

7、messages上下文处理器自己试了下好像只能写在视图函数中

 

csrf上下文处理器

1、作用:在模板中可以使用csrf_token变量来生成一个csrf token

2、前面我们在提交表单时都是将settings中的'django.middleware.csrf.CsrfViewMiddleware'注释了的
    ⑴这相当于是一个验证的功能,如果在提交表单时没有提交csrf_token这个变量,那么Django就会认为这个请求时不安全的,就会报错
    
例6:
⑴打开CsrfViewMiddleware后请求

⑵注册上下文处理器

⑶编辑模板:使用csrf_token变量

⑷访问

⑸另一种编写方式:使用csrf_token标签

注:实际上如果打开了csrf中间件,那么我们只需要在表单中传递一个"{% csrf_token% }"标签就可以了(与csrf上下文处理器没啥关系)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值