Django 中间键和上下文处理器的使用
作者:碔趺 发布时间:2022-04-19 05:04:56
一、中间键的引入:
Django中间件(Middleware)是一个 轻量级、底层的 “插件”系 统,可以介入 Django的请求和响应处理过程, 修改 Django的输入或输出.
django中的中间键:
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
在 django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件.
自定义中间键文件可以放在改项目的任意可以导入的地方 (一般放在 app根目录里面)
一个中间键就是一个可调用的对象,他会接收一个 request并返回一个请求
自定义一个中间键可以是一个函数:
def xxx(get_response): # (中间键工厂)函数名自定义,传的这个参数必须是这个名字
# 这里写一次性的设置和初始化:在 start project 的时候执行的,只执行一次
def xx(request): # (中间键)函数名自定义,传的这个参数必须是这个名字
# 这里写处理请求之前的代码
# 视图将会被调用,或者后面的中间键会执行
response = get_response(request)
# 处理请求响应之后的代码(视图已经被调用了)
return response
return xx # 返回自定义的中间键
激活(注册)中间键:在 setttings.py 文件里的 MIDDLEWARE 列表里添加自定义的中间键工厂 全路径(到中间键工厂;添加到最后)
例子:定义一个只能让谷歌浏览器访问的网站
from django.http import HttpResponseForbidden
def xxx(get_response): # (中间键工厂)函数名自定义,传的这个参数必须是这个名字
def xx(request): # (中间键)函数名自定义,传的这个参数必须是这个名字
user_angent = reqeust.META['HTTP_USER_AGENT'] # 获取请求的源信息中的 USER_AGENT
if not 'chrome' in user_agent.lower(): # 判断 chrome(谷歌浏览器) 在不在里面;忽略大小写(都用小写的)
return HttpRespinseForbidden()
response = get_response(request)
return response
return xx # 返回自定义的中间键
自定义一个中间键也可以是一个类:(这个的实例可以被调用)
class Xxx: (中间键工厂)类名自定义
def __init__(self,get_response): # 传的这个参数必须是这个名字
self.get_response = get_response
# 这里写一次性的设置和初始化:在 start project 的时候执行的,只执行一次
def __call__(self.request):
# 这里写处理请求之前的代码
# 视图将会被调用,或者后面的中间键会执行
response = self.get_response(request)
# 处理请求响应之后的代码(视图已经被调用了)
return response
激活(注册)中间键:在 setttings.py 文件里的 MIDDLEWARE 列表里添加自定义的中间键工厂 全路径(到中间键工厂;添加到最后)
请求和响应顺序:
按照 settings.py 文件 中的 MIDDLEWARE 列表顺序来的;请求的时候从前往后(从第一个到最后一个);响应的时候从后往前(从最后一个到第一个)
二、上下文处理器:
所有页面都需要特定变量
自定义上下文处理器也可以放在该项目的任意可以导入的地方(一般放在 app根目录里面)
自定义上下文处理器也可以是一个函数:
def xxx(request): # 传入必须是 request 这个名字当参数
return {'key':'value'} # 必须返回一个字典类型的对象;获取用 key 就可以了
激活(注册):在 settings.py 文件里的 TEMPLATES 中的 OPTIONS 中的 'context_processors' 里面添加自定义的上下文处理器的全路径(添加到最后)
注意: 如果在视图( views)中有相同的 key 被传入,那么将会使用 该 views 中的key
中间键和上下文总结:
中间件是在用户请求到响应的过程中去加入一些额外的逻辑功能
上下文是给所有的模板增加变量
三、 django admin后台:
配置 admin.py 文件:
from django.contrib import admin
from .models import 自定义表1,自定义表2
admin.site.register(自定义表1)
admin.site.register(自定义表2)
创建超级管理员:(命令行在项目根目录输入)
python manage.py createsuperuser
需要:用户名;邮箱;密码
配置 url:(默认是配置好的)
进入 django后台:
浏览器输入: ip:端口/admin
输入刚刚新建的用户名,密码
设置中文和中国时间:
在 settings.py 文件里设置:
自定义管理页面:
Django提供了admin.ModelAdmin类
通过定义 ModelAdmin的子类,来定义模型在Admin界面的显示方式
列表页属性:
list_display:显示字段,可以点击列头进行排序;等于一个列表;
list_display_links:点击该字段可以进入编辑页,可以写多个;等于一个列表
list_filter:过滤字段,过滤框会出现在右侧;等于一个列表;
search_fields:搜索字段,搜索框会出现在上侧;等于一个列表;
list_per_page:分页,分页框会出现在下侧;等于一个整数(页数)
添加、修改页属性:
fields:属性的先后顺序;等于一个列表
fieldsets:属性分组;等于一个列表
注意:上面两个属性,二者选一。
注册的时候需要把它的管理类一起注册进去
来源:http://www.cnblogs.com/2018-8-31/p/10544048.html


猜你喜欢
- 项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩第一种 一:安装包python -m pip ins
- 本文实例为大家分享了pygame实现俄罗斯方块的具体代码,供大家参考,具体内容如下import random, time, pygame,
- 当外层div盒子设置宽度为100%时,可echarts渲染出来宽度只有100px,这种情况大多数echarts所在的div设置了displa
- Python的mysql数据库的更新 &nbs
- 背景尽管到目前为止HTML4和XHTML1仍能够很好地满足我们的要求,但是它们仍然存在不足。为了满足用户丰富的基于Web应该程序的需要,达到
- 查看隐藏参数SELECT x.ksppinm name,y.ksppstvl value,y.ksppstdf isdefault,deco
- 一、标签语法由%}和 {% 来定义的,例如:{%tag%} {%endtag%},完整的标签有开始就有结束,如条件语句,有条件判断的开始,也
- 用Nginx做为代理服务器, 后端为 apache2. 设置允许上传最大为100M的文件. 1. Nginx配置: http { .....
- 在做自动化测试时,遇到两种情况需要判断usb是否已连接上(注,本文仅针对用adb命令来control手机)一种是在开测时(前提是同时要测试多
- 本文实例为大家分享了python人脸识别程序,大家可进行测试#coding:utf-8 import cv2 import sys from
- 这篇文章主要介绍了python通过移动端访问查看电脑界面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 首先要扩展自带的auth_user表我就放个图吧,同时setting中应该设置:# 此处重载是为了使UserProfile生效AUTH_US
- 本文实例讲述了Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法。分享给大家供大家参考,具体如下:问题输入第1行:字符串A第
- Microsoft SQL Server 7.0安全问题Microsoft Corporation【「Microsoft SQL Serve
- 本文实例讲述了Python实现简单状态框架的方法。分享给大家供大家参考。具体分析如下:这里使用Python实现一个简单的状态框架,代码需要在
- 一、概述AutoEncoder大致是一个将数据的高维特征进行压缩降维编码,再经过相反的解码过程的一种学习方法。学习过程中通过解码得到的最终结
- 前言:在软件测试中,为项目编写接口自动化用例已成为测试人员常驻的测试工作。本文以python为例,基于笔者曾使用过的三种用例数据读取方法:x
- pycharm出现no module named xlwt问题首先声明,我是初学者,今天按照书上步骤,创建Excel文件,当我的xlwt安装
- 前言SQL模式影响MySQL支持的SQL语法和执行的数据验证检查。MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不
- 背景说的事务,大家应该都不陌生,开发用到 MySql 数据库的时候,通常会用到事务。其中比较经典的例子就是转账,比如你要给小明转 50 块钱