Django——12 中间件 上下文处理器 admin后台
Django
中间件
Django中间件(Middleware)
是一个轻量级、底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.
django 中的中间件(middleware)
在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件.
中间件的结构
中间件中可以定义5个方法,分别是:
- process_request(self,request) :
- 执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
- process_view(self, request, callback, callback_args, callback_kwargs):
- 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
- process_template_response(self,request,response):
- 在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
- process_exception(self, request, exception)
- 当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
- process_response(self, request, response
- 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
中间件的执行顺序
请求以自上而下的顺序通过所有的层,view函数处理之后,响应以自下而上的顺序通过所有的层,期间经过的每个中间件都会对请求或者响应进行处理。
自定义中间件的第一个例子
首先在项目的主app下新建一个py文件
mysite/mysitemiddleware.py
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin class MyException(MiddlewareMixin): def process_exception(self, request, exception):
# 当试图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
print('自定义的process_exception')
return HttpResponse(exception)
def process_request(self, request):
# 执行试图之前被调用,在每个请求上调用,返回None或HttpResponse对象
print('自定义的 process_request')
return None
def process_view(self, request, callback, callback_args, callback_kwargs):
# 调用试图之前被调用,在每个请求上调用,返回None或HttpResponse
print('自定义的 process_view')
return None
def process_template_response(self, request, response):
# 试图刚好执行完毕被调用,在每个请求上调用,返回实现了render方法的响应对象
# 如果试图函数中的返回值中有render方法,才会执行process_template_response
print('自定义的process_template_response')
return response
def process_response(self, request, response):
# 所有响应返回浏览器之前被调用, 在每个请求上调用,返回HttpResponse
print('自定义的process_response')
return response
将中间件在settings中注册

运行的话,查看一个渲染的页面,会有如下信息显示

当我们出错的时候

再查看页面

页面会显示主要的错误信息,后台也很又更新

自定义中间件的第二个例子
1.在mysite/mysitemiddleware.py中新建一个UserMiddleware的类
2.这个例子是给request请求增加一个myuser的属性.
3.以这一句为分界,分别在view之前执行和view之后执行
mysite/mysitemiddleware.py
class UserMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response def __call__(self, request):
# request到达view之前执行的代码
username = request.session.get('username', '未登录')
if username:
setattr(request, 'myuser', username)
# response在试图到达用户浏览器之前执行的代码
print('request部分的代码')
response = self.get_response(request)
# 之后执行的代码
print('response部分的代码')
return response
放入settings中注册

在home视图渲染出来


上下文处理器
在模板中想要使用的变量是从视图函数中的context这个上下文的参数中传递进来的,每个视图函数需要什么参数就传什么参数.
上下文处理器就是创建模板变量.
在settings.py中,包含了当前使用的上下文处理器。他的作用是可以给每一个模板都提供相同的变量
在刚才的中间件的例子中,我们给request 增加了一个myuser的属性,而如果每个模板中也就是每个页面上都需要用到登录用户名这个变
量名的话, 那么我们也可以把这个变量在上下文处理器中将变量传给模板.
1.在主目录下创建了一个.py的文件.
2.在.py的文件中创建一个myuser的函数
3.必须传入request这个参数
4.必须返回一个字典类型的对象.
mysite/my_content_processor.py
def my_user(request):
username = request.session.get('username', '未登录')
if username:
return {'myuser': username}
将my_user在settings中注册
mysite是项目名,先找到文件所在的位置,把自定义的上下文处理器的函数添加到TEMPLATES->OPTIONS->context_processors中。
然后我们在home页面设置一下

查看结果:

总结:
- 中间件是在用户请求到响应的过程中去加入一些额外的逻辑功能,例子中给request增加了一个myuser的属性.
- 上下文是给所有的模板增加变量,例子中给模板增加了一个myuser的变量.
admin后台管理

在项目的目录下我们会看到这样一个url的配置,你有自己去访问这个url地址吗
输入127.0.0.1:8000/admin之后
你会看到出来这样一个界面,
让你输入用户名和密码去登录?
那么用户名和密码从哪里来,登录之后又是什么样的呢?
Django管理页面
为你的员工或客户生成一个用户添加,修改和删除内容的后台是一项缺乏创造性和乏味的工作。因此,Django 全自动地根据模型创建后台界面。
Django 产生于一个公众页面和内容发布者页面完全分离的新闻类站点的开发过程中。站点管理人员使用管理系统来添加新闻、事件和体育时讯等,这些添加的内容被显示在公众页面上。Django 通过为站点管理人员创建统一的内容编辑界面解决了这个问题。
管理界面不是为了网站的访问者,而是为管理者准备的。
admin创建管理用户

如果忘记密码的话:

设置成中文

向admin中注册模型

admin后台显示

admin后台操作

自定义管理页面


Django——12 中间件 上下文处理器 admin后台的更多相关文章
- Django 12 中间件、上下文处理器和admin后台
Django 12 中间件.上下文处理器和admin后台 一.中间件 #Django中间件 (Middleware) # 一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改 ...
- Django中间件之实现Admin后台IP白名单
Django自带的Admin管理后台很方便,但是实际生产环境真的会有挺多安全问题的,在admin的安全防护这方面,我之前就研究实现了给admin加上登录验证码和限流功能,可以参考这篇文章: 不过就在内 ...
- python自动化开发-[第二十一天]-form验证,中间件,缓存,信号,admin后台
今日概要: 1.form表单进阶 2.中间件 3.缓存 4.信号 5.admin后台 上节课回顾 FBV,CBV 序列化 - Django内置 - json.dumps(xxx,cls=) Form验 ...
- django使用bootstrap快速美化 admin后台
使用django-admin-bootstrappe快速美化后台 两步: 1.pip install django-admin-bootstrapped 安装应用 2.在setting.py里面添加 ...
- django之中间件、缓存、信号、admin内置后台
目录: 中间件 缓存 信号 admin后台 一.中间件 1.什么是中间件? 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的 ...
- django上下文处理器
上下文处理器(context processors)上下文处理器是可以返回一些数据,在全局模板中都可以使用.比如登录后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每 ...
- 潭州课堂25班:Ph201805201 django框架 第十二课 自定义中间件,上下文处理,admin后台 (课堂笔记)
中间件 在项目主目录下的配置文件 在项目主目录下创建文件 写个自定义异常处理 方法1 要让其生效,要在主目录下,的中间件中进行注册 主目录下.该文件名.类名 在进入视图函数之前进行判断, 给 req ...
- Django - 请求与响应、表单、中间件、上下文处理器
请求与响应篇 一.HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象.视图函数的第一个参数(request)是HttpRequest对象在djang ...
- Django框架基础知识12-中间件及上下文处理器
Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...
随机推荐
- CDOJ 1330 柱爷与远古法阵(高斯消元)
CDOJ 1330 柱爷与远古法阵(高斯消元) 柱爷与远古法阵 Time Limit: 125/125MS (Java/Others) Memory Limit: 240000/240000K ...
- 交换排序(2)——冒泡排序(bubble sort)
冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所 ...
- linux 条件测试 ******
文件状态测试 -b filename 当filename 存在并且是块文件时返回真(返回0) -c filename 当filename 存在并且是字符文件时返回真 -d pathname 当path ...
- Linux系统的整体目录结构和文件解析
Linux系统目录结构 使用 ls / 查看系统的文件目录: /:根目录,根目录下一般只存放子目录,不存放文件.在linux系统中所有的文件都挂载该目录下. /bin:命令目录. 存放系统的可执行的二 ...
- 湖南集训day8
难度:☆☆☆☆☆☆☆ /* 可以先考虑一维,可知 模k意义下相同的前缀和任意两个相减都是k的倍数 问题等价于统计前缀何种模k相同的数的对数. 多维的时候二维前缀和,压行或者压列,n^3可以解决. */ ...
- 多物体运动框架案例一:多个Div的宽度运动变化
多物体运动框架,鼠标移入Div,此Div逐渐变宽,鼠标移出后,此Div逐渐缩短恢复原长度. <!doctype html> <html> <head> <ti ...
- Vue Router的params和query传参的使用和区别
vue页面跳转有两种方式分别是:name和path this.$router.push({name: 'HelloWorld2}) this.$router.push({path: '/hello-w ...
- BZOJ 3998 后缀数组
思路: 第一问 建出来后缀数组以后 前缀和一发n-sa[i]-ht[i]+1 二分 第二问 二分判断是带重复的第几 怎么判断呢 找到它 往后扫ht递减sum+=它 跟K判判 注意等于 加 ...
- Parameter index out of range (1 > number of parameters, which is 0).
数据库错误:Parameter index out of range (1 > number of parameters, which is 0) ...
- c# regex Match Matches MatchCollection 用法
string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080"; Reg ...