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

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 中间键和上下文处理器的使用

来源:http://www.cnblogs.com/2018-8-31/p/10544048.html

标签:Django,中间键,上下文处理器
0
投稿

猜你喜欢

  • Python3多线程详解

    2022-01-03 07:12:41
  • Python中文分词实现方法(安装pymmseg)

    2023-12-06 02:43:41
  • Python网络爬虫信息提取mooc代码实例

    2022-01-02 12:18:23
  • python爬取各类文档方法归类汇总

    2022-02-22 05:45:47
  • Mootools 1.2教程(6)——操纵HTML DOM元素

    2008-11-20 13:19:00
  • python获取http请求响应头headers中的数据的示例

    2023-06-30 14:49:02
  • go语言 xorm框架 postgresql 的用法及详细注解

    2024-04-25 15:26:45
  • SQL Server三种锁定模式的知识讲解

    2024-01-17 19:30:11
  • python之模拟鼠标键盘动作具体实现

    2022-12-23 10:51:29
  • Python属性和内建属性实例解析

    2023-06-10 18:22:15
  • MySQL的InnoDB存储引擎的数据页结构详解

    2024-01-14 01:23:27
  • Python中bisect的用法及示例详解

    2022-07-06 16:00:12
  • d3.js入门教程之数据绑定详解

    2024-04-22 12:48:54
  • python识别验证码的思路及解决方案

    2022-02-02 16:05:13
  • 将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用

    2012-06-06 20:03:43
  • python批量处理打开多个文件

    2022-10-21 05:26:47
  • MySQL中数据表操作详解

    2008-12-29 13:50:00
  • C#应用XML作为数据库的快速开发框架实现方法

    2024-01-19 12:00:01
  • JavaScript判断微信浏览器实例代码

    2024-04-18 09:30:31
  • SqlServer实现类似Oracle的before触发器示例

    2024-01-24 11:06:50
  • asp之家 网络编程 m.aspxhome.com