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网站模板,你学习它 ...
随机推荐
- flv.js怎么用?全面解读flv.js代码
flv.js项目的代码有一定规模,如果要研究的话,我建议从demux入手,理解了demux就掌握了媒体数据处理的关键步骤,前面的媒体数据下载和后面的媒体数据播放就变得容易理解了. 先普及点背景知识,为 ...
- SDOI2017 Round2 详细题解
这套题实在是太神仙了..做了我好久...好多题都是去搜题解才会的 TAT. 剩的那道题先咕着,如果省选没有退役就来填吧. 「SDOI2017」龙与地下城 题意 丢 \(Y\) 次骰子,骰子有 \(X\ ...
- Linux(Ubuntu)换apt-get源
在虚拟机安装完Ubuntu后,因为apt-get命令默认的服务器在国外会很慢,换成国内的会快很多 选一个国内镜像源,以清华大学开源镜像为例,要选对应的Ubuntu版本 网站链接https://mirr ...
- Dynamic Rankings ZOJ - 2112(主席树+树状数组)
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
- jmeter笔记(1)--原理,下载与安装
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文 ...
- vue实战记录(六)- vue实现购物车功能之地址列表选配
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(六) GitHub:sue ...
- CentOS7 Zabbix3.4安装
依赖于lnmp或者lamp环境: 1.下载源码包 # wget -O zabbix-3.4.2.tar.gz http://sourceforge.net/projects/zabbix/files/ ...
- busybox编译
sync.c:(.text.sync_main+0x7c): undefined reference to `syncfs'Coreutils—>sync选项去掉 nsenter.c:(.tex ...
- JavaEESSM框架配置文件
SSM框架理解 最近两星期一直在学JavaEE的MVC框架,因为之前学校开的JavaEE课程就一直学的吊儿郎当的,所以现在真正需要掌握就非常手忙脚乱,在此记录下这段时间学习的感悟,如有错误,希望大牛毫 ...
- Unity3D 热更新方案总结
如何评价腾讯在Unity下的xLua(开源)热更方案? Unity 游戏用XLua的HotFix实现热更原理揭秘 腾讯开源手游热更新方案,Unity3D下的Lua编程 [Unity]基于IL代码注入的 ...