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. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  2. 让谷歌浏览器(chrome)保存调试代码workspace

    方法/步骤  chrome浏览器早期版本的操作方法与我现在要讲的方法有所不同,因此操作前请注意浏览器的版本号. 示例中的版本号: 53.0.2785.116 m  任意打开一个需要调试的html文件 ...

  3. html5中不再支持的元素

    html5中不再支持的元素:1.acronym(建议abbr) : 定义首字母缩写2.applet(建议object): 定义 applet3.basefont(使用css控制)4.big(使用css ...

  4. Unity 代码改宏定义

    两个函数 PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup); //所有宏定义 ; 分割 PlayerSettings.SetS ...

  5. codevs1312连续自然数和

    1312 连续自然数和  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 对于一个自然数M,求出所有的连续的自然数段 ...

  6. Tyvj1305最大子序和(单调队列优化dp)

    描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7当m=2或m=3时,S=5+1=6 输入 ...

  7. SpringBoot2.0整合Redission

    Redisson是redis一个很强大的客户端,有兴趣的同学可以看我的下一篇文章,这篇主要讲如何整合,费话不多说,直接上干货(大牛请绕道) 首先创建RedissionConfig文件 import o ...

  8. Android点9图的运用

    在Android UI设计开发中,我们经常会用到一些图标.图片来做背景等. 相信很多同学都会遇到一个问题,就是我们让美工做好一张图,一个图标,呃,看起来挺好看的,但是放进app中,扩大或缩小.在不同分 ...

  9. .net 必看书籍1

    我们2个网站运营群,有很多技术高手,同时也有大部分技术新人,如何从传统asp转到.net,从传统table转到div+css布局,从传统技术转到ajax,从小型程序转到高性能并发的大型程序,我花了2小 ...

  10. JAVA小记(一)

    java中向上转型.向下转型.内部类中所需注意的问题: 向上转型与向下转型: 举个例子:有2个类,Father是父类,Son类继承自Father. Father f1 = new Son();   / ...