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多线程抓取天涯帖子内容示例
Apr 03 Python
Python实用日期时间处理方法汇总
May 09 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
python使用response.read()接收json数据的实例
Dec 19 Python
Python后台管理员管理前台会员信息的讲解
Jan 28 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
python 循环数据赋值实例
Dec 02 Python
python文件和文件夹复制函数
Feb 07 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 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
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
js活用事件触发对象动作
2008/08/10 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python字符串处理实例详解
2017/05/18 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
django的model操作汇整详解
2019/07/26 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
成人毕业生自我鉴定
2013/10/18 职场文书
欢迎横幅标语
2014/06/17 职场文书
民间借贷协议书范本
2014/10/01 职场文书
撤诉状格式范本
2015/05/19 职场文书
2015年测量员工作总结
2015/05/23 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
教你nginx跳转配置的四种方式
2022/07/07 Servers