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 responsereturn xx # 返回自定义的中间键
激活(注册)中间键:在 setttings.py 文件里的 MIDDLEWARE 列表里添加自定义的中间键工厂全路径(到中间键工厂;添加到最后)
例子:定义一个只能让谷歌浏览器访问的网站
from django.http import HttpResponseForbiddendef xxx(get_response): # (中间键工厂)函数名自定义,传的这个参数必须是这个名字def xx(request): # (中间键)函数名自定义,传的这个参数必须是这个名字user_angent = reqeust.META['HTTP_USER_AGENT'] # 获取请求的源信息中的 USER_AGENTif not 'chrome' in user_agent.lower(): # 判断 chrome(谷歌浏览器) 在不在里面;忽略大小写(都用小写的)return HttpRespinseForbidden()response = get_response(request)return responsereturn 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 adminfrom .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:属性分组;等于一个列表
注意:上面两个属性,二者选一。
注册的时候需要把它的管理类一起注册进去
转载于:https://www.cnblogs.com/2018-8-31/p/10544048.html
Django 学习第十一天——中间键和上下文处理器相关推荐
- Django学习之十一:真正理解Django的路由分发和反解url原理
目录 URL Dispatcher 简介 模式概念 对比URLPattern 与 URLResolver (多态的体现) 构建子路由几种方式 反解url算法逻辑 URL Dispatcher 简介 d ...
- session登录状态保持html,Flask使用Session和上下文处理器保持登录状态
(1)Flask如何实现用户登录后注销.用户登录后权限不同,页面不一样的功能呢? 我们可以使用session来保存用户登录的这个状态,当登录成功的时候,将当前登录的username存入session, ...
- django学习笔记02
原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...
- 千锋Django学习笔记
千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...
- 基于Pycharm的Django学习 —— 项目实战(Form和ModelForm)
项目实战 项目开发流程 项目准备工作 项目部门管理 UI设计 depart_list 模板继承 depart_add depart_delete depart_edit 项目用户管理 user_lis ...
- Django学习之路-基础篇
Django 学习之路 一.Django项目创建 1.项目结构 1.1. settings.py 文件 1.2 URL 1.3 视图函数 1.4 路由配置-path 二.请求与响应 2.1.请求和响应 ...
- django学习笔记01
原创博客地址:django学习笔记01 基于教程,刘江的博客教程Django教程:https://www.liujiangblog.com/course/django/87 第一章:模型层 1.1 模 ...
- Python Django 学习 (二) 【Django 模型】
注: 由于自己排版确实很难看,本文开始使用markdown编辑,希望有所改善 官方定义 A model is the single, definitive source of information ...
- Django 学习小组:博客开发实战第二周教程 —— 实现博客详情页面和分类页面
本教程内容已过时,更新版教程请访问: django 博客开发入门教程. 上周我们完成了博客的 Model 部分,以及 Blog 的首页视图 IndexView. 本节接上周的文档 Django 学习小 ...
最新文章
- pip 另一种安装方法:python setup.py install
- C#读写xml文件应用
- python是谁维护的_Python 库从开发到维护
- Numpy | Python列表与Numpy数组对比
- go 写文件_Pythonista 的 Go 之旅
- 大数据_Hbase-(数据读取流程_hbase读取效率比较慢的原因)---Hbase工作笔记0008
- C/C++ 内存四区模型
- mcal rtm_RTM的完整形式是什么?
- 计算机应用基础教程学什么,[电脑基础知识]计算机应用基础教程学习.ppt
- 用python爬取之后发现果然如此,都说知乎的小姐姐漂亮
- 【转】对程序中常出现的EINT、DINT、ERTM、DRTM的理解
- 手机显示未连接网络连接到服务器是怎么回事,苹果浏览器显示未连接互联网是什么回事...
- ESPRIT 2019车铣复合编程基础到五轴 走心机 视频教程
- 蓄水池问题c语言编程,蓄水池算法(Reservoir Sampling)
- 打造3大产品差异化,成就下一个亚马逊爆品!
- vue 中使用$refs,报this.$refs.xxx.xxx() is not a function
- Socket error Event: 32 Error: 10053
- 386页《Python深度学习》电子书及源码下载
- inventor如何钣金出弧面_Inventor钣金造型教程
- android 文件管理器下载,ES文件管理器下载