Django 中间键和上下文处理器的使用


Posted in Python onMarch 17, 2019

一、中间键的引入:

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 列表顺序来的;请求的时候从前往后(从第一个到最后一个);响应的时候从后往前(从最后一个到第一个)

Django 中间键和上下文处理器的使用

二、上下文处理器:

所有页面都需要特定变量

自定义上下文处理器也可以放在该项目的任意可以导入的地方(一般放在 app根目录里面)

自定义上下文处理器也可以是一个函数:

def xxx(request): # 传入必须是 request 这个名字当参数
return {'key':'value'}  # 必须返回一个字典类型的对象;获取用 key 就可以了

激活(注册):在 settings.py 文件里的 TEMPLATES  中的 OPTIONS  中的 'context_processors' 里面添加自定义的上下文处理器的全路径(添加到最后)

Django 中间键和上下文处理器的使用

注意: 如果在视图( 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 中间键和上下文处理器的使用

进入 django后台:

浏览器输入: ip:端口/admin

输入刚刚新建的用户名,密码

设置中文和中国时间:

在 settings.py 文件里设置:

Django 中间键和上下文处理器的使用

自定义管理页面:

  • Django提供了admin.ModelAdmin类
  • 通过定义 ModelAdmin的子类,来定义模型在Admin界面的显示方式

列表页属性:

  • list_display:显示字段,可以点击列头进行排序;等于一个列表;
  • list_display_links:点击该字段可以进入编辑页,可以写多个;等于一个列表
  • list_filter:过滤字段,过滤框会出现在右侧;等于一个列表;
  • search_fields:搜索字段,搜索框会出现在上侧;等于一个列表;
  • list_per_page:分页,分页框会出现在下侧;等于一个整数(页数)

添加、修改页属性:

  • fields:属性的先后顺序;等于一个列表
  • fieldsets:属性分组;等于一个列表

注意:上面两个属性,二者选一。

注册的时候需要把它的管理类一起注册进去

Django 中间键和上下文处理器的使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编写屏幕截图程序方法
Feb 18 Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
Python3中exp()函数用法分析
Feb 19 Python
Python Pandas 箱线图的实现
Jul 23 Python
python nmap实现端口扫描器教程
May 28 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
Python装饰器的应用场景代码总结
Apr 10 Python
Python时间和字符串转换操作实例分析
Mar 16 #Python
Python中numpy模块常见用法demo实例小结
Mar 16 #Python
Python常见的pandas用法demo示例
Mar 16 #Python
详解python中list的使用
Mar 15 #Python
详解Python_shutil模块
Mar 15 #Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 #Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 #Python
You might like
ADODB的数据库封包程序库
2006/12/31 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
用js怎么把&字符换成"&amp:"
2006/10/19 Javascript
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
python实现360的字符显示界面
2014/02/21 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
python 字符串常用函数详解
2019/09/11 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
后勤人员自我评价怎么写
2013/09/19 职场文书
《穷人》教学反思
2014/04/08 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书