Django

  1. 中间件
    1. 中间件介绍
    2. 中间件的第一个例子
    3. 中间件的第二个例子
  2. 上下文处理器
  3. admin后台管理

 


中间件

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后台的更多相关文章

  1. Django 12 中间件、上下文处理器和admin后台

    Django 12 中间件.上下文处理器和admin后台 一.中间件 #Django中间件 (Middleware) # 一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改 ...

  2. Django中间件之实现Admin后台IP白名单

    Django自带的Admin管理后台很方便,但是实际生产环境真的会有挺多安全问题的,在admin的安全防护这方面,我之前就研究实现了给admin加上登录验证码和限流功能,可以参考这篇文章: 不过就在内 ...

  3. python自动化开发-[第二十一天]-form验证,中间件,缓存,信号,admin后台

    今日概要: 1.form表单进阶 2.中间件 3.缓存 4.信号 5.admin后台 上节课回顾 FBV,CBV 序列化 - Django内置 - json.dumps(xxx,cls=) Form验 ...

  4. django使用bootstrap快速美化 admin后台

    使用django-admin-bootstrappe快速美化后台 两步: 1.pip install django-admin-bootstrapped  安装应用 2.在setting.py里面添加 ...

  5. django之中间件、缓存、信号、admin内置后台

    目录: 中间件 缓存 信号 admin后台 一.中间件 1.什么是中间件? 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的 ...

  6. django上下文处理器

    上下文处理器(context processors)上下文处理器是可以返回一些数据,在全局模板中都可以使用.比如登录后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每 ...

  7. 潭州课堂25班:Ph201805201 django框架 第十二课 自定义中间件,上下文处理,admin后台 (课堂笔记)

    中间件 在项目主目录下的配置文件 在项目主目录下创建文件 写个自定义异常处理 方法1 要让其生效,要在主目录下,的中间件中进行注册 主目录下.该文件名.类名 在进入视图函数之前进行判断,  给 req ...

  8. Django - 请求与响应、表单、中间件、上下文处理器

    请求与响应篇 一.HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象.视图函数的第一个参数(request)是HttpRequest对象在djang ...

  9. Django框架基础知识12-中间件及上下文处理器

    Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...

随机推荐

  1. 主表a主表b 从表c中有ab两个表中各一个字段a1,b1 从表d中有ab两个表中各一个字段a2,b2

    a1和a2在a表中具有唯一性 b1和b2在b表中具有唯一性 现在需要连接c表和d表 需要分两步来做 1.先让c表join表a和表b select c.*,a.a2,b.b2 from c inner ...

  2. YTU 2723: 默认参数--求圆的面积

    2723: 默认参数--求圆的面积 时间限制: 1 Sec  内存限制: 128 MB 提交: 206  解决: 150 题目描述 根据半径r求圆的面积, 如果不指定小数位数,输出结果默认保留两位小数 ...

  3. eclipse高亮选中属性以及更改颜色

    1.显示:      1.1.工具栏里有个黄色小笔的图标,点一下就好了      1.2.打开对话框windows->preference,在左上角输入mark Occurrencs 把右边都选 ...

  4. bzoj 1822 冷冻波

    题目大意: 在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵 我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线距离不超过R,且巫妖和小精灵的 ...

  5. E20170916-hm

    sassy   adj. 无礼的; 漂亮的; <非正,美> <贬>粗鲁的; <褒>时髦的; digest vt. 消化; 整理; compressor  n. 压气 ...

  6. C. Searching for Graph(cf)

    C. Searching for Graph time limit per test 1 second memory limit per test 256 megabytes input standa ...

  7. Elasticsearch索引的操作,利用kibana(如何创建/删除一个es的索引?)

    我们已经通过索引一篇文档创建了一个新的索引 .这个索引采用的是默认的配置,新的字段通过动态映射的方式被添加到类型映射.现在我们需要对这个建立索引的过程做更多的控制:我们想要确保这个索引有数量适中的主分 ...

  8. day24 03 多继承

    day24 03 多继承 正常的代码中  单继承==减少了代码的重复 继承表达的是一种 子类是父类的关系 1.简单的多继承关系 A,B,C,D四个类,其中D类继承A,B,C三个父类,因此也叫多继承,子 ...

  9. 微信小程序上传多张图片,及php后台处理

    微信小程序上传多张图片,级小程序页面布局直接来代码index.wxml <view class='body' style='width:{{windowWidth}}px;height:{{wi ...

  10. printf的实型

    参  数 说  明 %f 按实数格式输出,整数部分按实际位数输出,6位小数 %m.nf 总位数m(含小数点),其中有n位小数 %-m.nf 同上,左对齐 %0.xf 输出小数点后x位   %f 后面如 ...