一、中间键的引入:

  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 学习第十一天——中间键和上下文处理器相关推荐

  1. Django学习之十一:真正理解Django的路由分发和反解url原理

    目录 URL Dispatcher 简介 模式概念 对比URLPattern 与 URLResolver (多态的体现) 构建子路由几种方式 反解url算法逻辑 URL Dispatcher 简介 d ...

  2. session登录状态保持html,Flask使用Session和上下文处理器保持登录状态

    (1)Flask如何实现用户登录后注销.用户登录后权限不同,页面不一样的功能呢? 我们可以使用session来保存用户登录的这个状态,当登录成功的时候,将当前登录的username存入session, ...

  3. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  4. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  5. 基于Pycharm的Django学习 —— 项目实战(Form和ModelForm)

    项目实战 项目开发流程 项目准备工作 项目部门管理 UI设计 depart_list 模板继承 depart_add depart_delete depart_edit 项目用户管理 user_lis ...

  6. Django学习之路-基础篇

    Django 学习之路 一.Django项目创建 1.项目结构 1.1. settings.py 文件 1.2 URL 1.3 视图函数 1.4 路由配置-path 二.请求与响应 2.1.请求和响应 ...

  7. django学习笔记01

    原创博客地址:django学习笔记01 基于教程,刘江的博客教程Django教程:https://www.liujiangblog.com/course/django/87 第一章:模型层 1.1 模 ...

  8. Python Django 学习 (二) 【Django 模型】

    注: 由于自己排版确实很难看,本文开始使用markdown编辑,希望有所改善 官方定义 A model is the single, definitive source of information ...

  9. Django 学习小组:博客开发实战第二周教程 —— 实现博客详情页面和分类页面

    本教程内容已过时,更新版教程请访问: django 博客开发入门教程. 上周我们完成了博客的 Model 部分,以及 Blog 的首页视图 IndexView. 本节接上周的文档 Django 学习小 ...

最新文章

  1. pip 另一种安装方法:python setup.py install
  2. C#读写xml文件应用
  3. python是谁维护的_Python 库从开发到维护
  4. Numpy | Python列表与Numpy数组对比
  5. go 写文件_Pythonista 的 Go 之旅
  6. 大数据_Hbase-(数据读取流程_hbase读取效率比较慢的原因)---Hbase工作笔记0008
  7. C/C++ 内存四区模型
  8. mcal rtm_RTM的完整形式是什么?
  9. 计算机应用基础教程学什么,[电脑基础知识]计算机应用基础教程学习.ppt
  10. 用python爬取之后发现果然如此,都说知乎的小姐姐漂亮
  11. 【转】对程序中常出现的EINT、DINT、ERTM、DRTM的理解
  12. 手机显示未连接网络连接到服务器是怎么回事,苹果浏览器显示未连接互联网是什么回事...
  13. ESPRIT 2019车铣复合编程基础到五轴 走心机 视频教程
  14. 蓄水池问题c语言编程,蓄水池算法(Reservoir Sampling)
  15. 打造3大产品差异化,成就下一个亚马逊爆品!
  16. vue 中使用$refs,报this.$refs.xxx.xxx() is not a function
  17. Socket error Event: 32 Error: 10053
  18. 386页《Python深度学习》电子书及源码下载
  19. inventor如何钣金出弧面_Inventor钣金造型教程
  20. android 文件管理器下载,ES文件管理器下载

热门文章

  1. hive--udf函数(开发-4种加载方式)
  2. Hadoop 2.X 从入门到精通系列视频课程套餐
  3. MVC把随机产生的字符串转换为图片
  4. 如何根据字典中值的大小,对字典中的项排序
  5. Linux分区、LVM等简述
  6. 第十一周编程总结--助教
  7. java提高篇(三十)-----Iterator
  8. 石川es6课程---18、ES6 复习
  9. python---4
  10. xnawindowsph又见“X”Phone ePhone手机V90新鲜评测