Django 学习第十一天——中间键和上下文处理器
一、中间键的引入:
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:属性分组;等于一个列表
注意:上面两个属性,二者选一。
注册的时候需要把它的管理类一起注册进去

Django 学习第十一天——中间键和上下文处理器的更多相关文章
- Django学习之十一:真正理解Django的路由分发和反解url原理
目录 URL Dispatcher 简介 模式概念 对比URLPattern 与 URLResolver (多态的体现) 构建子路由几种方式 反解url算法逻辑 URL Dispatcher 简介 d ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- Django 学习笔记之四 QuerySet常用方法
QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...
- Django 学习笔记之三 数据库输入数据
假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...
- Django学习笔记(三)—— 型号 model
疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...
- Python框架之Django学习
当前标签: Django Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0 Python框架之Django学习笔记(十三) 尛 ...
- Django 学习笔记(六)MySQL配置
环境:Ubuntu16.4 工具:Python3.5 一.安装MySQL数据库 终端命令: sudo apt-get install mysql-server sudo apt-get install ...
- Django学习之十三:提高页面开发效率减少冗余的模板系统
目录 Django 模板 模板语法 逻辑语法 函数式过滤器 内置filter 功能tag 注释 内置tag 导入三方tag and filter(load) 过滤器和功能tag的区别 自定义tag和f ...
- Django学习笔记(1)——初识Django
一:Web框架介绍 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以快速帮你开发特定的系统. Web框架是别人已经设定好的一个web网站模板,你学习它 ...
随机推荐
- [FJOI2018]领导集团问题
[FJOI2018]领导集团问题 dp[i][j],i为根子树,最上面的值是j,选择的最大值 观察dp方程 1.整体Dp已经可以做了. 2.考虑优美一些的做法: dp[i]如果对j取后缀最大值,显然是 ...
- Linux基本命令总结(五)
接上篇: 21,在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是chang ...
- <一>企业级开源仓库nexus实战应用–nexus的安装
1,Nexus 介绍. Nexus是什么? Nexus 是一个强大的maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问. 不仅如此,他还可以用来创建yum.pypi.npm.doc ...
- Pandas系列(十一)-文件IO操作
数据分析过程中经常需要进行读写操作,Pandas实现了很多 IO 操作的API,这里简单做了一个列举. 格式类型 数据描述 Reader Writer text CSV read_ csv to_cs ...
- CMDB服务器管理系统【s5day90】:创建资产更新服务器硬盘信息
1.创建硬件资产信息 import json from django.shortcuts import render,HttpResponse from django.views.decorators ...
- table 表格固定表头和第一列、内容可滚动
整理了下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- Unity3D 热更新方案总结
如何评价腾讯在Unity下的xLua(开源)热更方案? Unity 游戏用XLua的HotFix实现热更原理揭秘 腾讯开源手游热更新方案,Unity3D下的Lua编程 [Unity]基于IL代码注入的 ...
- NTFS权限笔记 2017-12-4
NTFS权限:(文件或文件夹右键属性--安全--ACL) 1.文件系统类型: NTFS:支持单个文件大于4个G,支持文件权限设置 FAT32:不支持单个文件大于4G,不支持文件权限设置 2.取消权限继 ...
- 2.12 for循环
for循环 像while循环一样,for可以完成循环的功能. 在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等. for循环的格式 for 临时变量 in 列表或者字符串 ...
- js中精度问题以及解决方案
js中的数字按照IEEE 754的标准,使用64位双精度浮点型来表示.其中符号位S,指数位E,尾数位M分别占了1,11,52位,并且在ES5规范中指出了指数位E的取值范围是[-1074, 971]. ...