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) ...
随机推荐
- 全面解析布局(Grid & Canvas &StackPanel &Wrappanel) 转
写这篇文章前,特意在百度搜索了一下,发现目前网上介绍布局的文章不多,质量也不是很高.拿grid和canvas来讲,这两个布局容器还是有许多小细节值得讲的,如果你不了解的话,开发中经常会遇到一些让人匪夷 ...
- C++11 function使用
function是一组函数对象包装类的模板,实现了一个泛型的回调机制. 引入头文件 #include <functional>using namespace std;using names ...
- Django day27 认证组件,权限组件()
一:认证组件 1.写一个类 class LoginAuth(): # 函数名一定要叫authenticate,接收必须两个参数,第二个参数是request对象 def authenticate(sel ...
- 一款超好用的第三方评论插件--Gitalk
一,使用Gitalk的背景: 1.最近在做一个基于Java的个人博客系统,已经基本完工了,突然发现怎么没有评论的操作,如果再从头开始从数据库开始写的话,花费的代价有点大,于是乎我就在网上寻找一款适合我 ...
- vue-video-player视频播放插件
安装依赖 npm install vue-video-player -S 引入配置 //main.js import 'video.js/dist/video-js.css' import 'vue- ...
- dubbo+zookeeper下生产者和消费者配置(基于springboot开发)
一.总共分为三个目录: dubbo-api 服务的接口用于对接客户端和服务端 dubbo-client 客户端配置文件为:consumer.xml dubbo-service 服务 ...
- 跨域请求之jsonp
1.什么是跨域请求: 服务器A上的一个页面,要请求服务器B上的一个处理程序,这就叫做跨域请求 本次的测试页面为: 处理程序kimhandler.ashx,如下: http://qxw119243026 ...
- 实现微信小程序的wxml文件和wxss文件在phpstrom的支持
最近下载了微信小程序准备好好看看,但是发现微信小程序用的后缀名是不一样的,.wxml代表的就是平时用的.html,.wxss代码的就是平时用的.css.但是phpstorm无法识别,为了更方便的码代码 ...
- Miller Rabin 大素数测试
PS:本人第一次写随笔,写的不好请见谅. 接触MillerRabin算法大概是一年前,看到这个算法首先得为它的神奇之处大为赞叹,竟然可以通过几次随机数据的猜测就能判断出这数是否是素数,虽然说是有误差率 ...
- CSS——伪类
在a标签中运用最多: 1.a:link {color: #FF0000} /* 未访问的链接 */ 2.a:visited {color: #00FF00} /* 已访问的链接 */ 3.a:hove ...