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向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
Django时区详解
Jul 24 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
python使用Geany编辑器配置方法
Feb 21 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
python代数式括号有效性检验示例代码
Oct 04 Python
python 基于opencv实现图像增强
Dec 23 Python
Django使用channels + websocket打造在线聊天室
May 20 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
mysq GBKl乱码
2006/11/28 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
python 读写、创建 文件的方法(必看)
2016/09/12 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
python绘制玫瑰的实现代码
2020/03/02 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
公司门卫的岗位职责
2014/02/19 职场文书
业务员自荐信范文
2014/04/20 职场文书
社会实践的活动方案
2014/08/22 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS