简介

用于处理request和response的中间处理的函数,可以创建在项目中的任意位置,只要可以导入即可。

建议创建在APP目录下,方便管理。

函数范式与激活

 中间件的范式:

 # 必须接受get_response这个餐参数
def simple_middleware(get_response): #中间件工厂 # 此处为一次性的设置和初始化,在start project的时候。 def middleware(request): # 处理请求之前被执行的代码。
# 视图将会被调用,或者后面的中间件会执行。 response = get_response(request) # 必写 # 处理请求,响应之后的代码。
# 视图已经被调用。 return response return middleware

注册激活中间件

  在settings中找到MIDDLEWARE,添加中间件的导入全路径

 MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', # 激活
'teacher.middleware.simple_middleware',
] 解析:
请求从上往下执行,
响应从下往上返回, 当在某一层有响应返回后,就不在往下执行了,就会返回响应回去。 中间件的运行流程 当有多个中间件的时候,在调用的注册后,中间件中在执行到'response = get_response(request)'之前,
不会马上的处理视图,而是会执行到下一个中间件的'response = get_response(request) '前面。

看到了使用方法,我们来写一个简单的例子。类似反爬虫

 from django.

 def simple_middleware(get_response):   

     def middleware(request):

         # 获取当前访问的user-agent
user_agent = request.META['HTTP_USER_AGENT']
if not 'chrome' in user_agent.lower():
return HttpResponseForbidden() response = get_response(request) return response return middleware

类的范式

 class SimpleMiddleWare:

     # 和函数一样,必须有一个get_response
def __init__(self, get_response):
self.get_response = get_response
# 此处为一次性的设置和初始化,在start projec的时候。 # 因为需要被调用,所以需要有一个call方法
def __call__(self, request): # 处理请求之前被执行的代码。
# 视图将会被调用,或者后面的中间件会执行。 response = self.get_response(request) # 处理请求,响应之后的代码。
# 视图已经被调用。 return response

中间件中可以定义的方法,分别是:

process_view(self, request, callback, callback_args, callback_kwargs):
# 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象 process_template_response(self,request,response):
# 在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象 process_exception(self, request, exception)
# 当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象

上下文处理器

可以创建在项目中的任意位置,和context类似的使用,但是这个定义的是全局变量,可以所有的html应用

在APP下创建一个customer_context_processors.py文件
 范式:

     # 必须接受一个request
def my_name(request):
# 必须返回一个字典
return {'name': 'aaa'}

在settings中激活设置

也是从上往下执行的,但是后执行的会覆盖之前执行的
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'template')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages', # 激活
'teacher.customer_context_processors.my_name'
],
},
},
]

html中使用

# 使用很简单,如果是视图函数传送过来的context,则会覆盖当前name。因为view是比上下文处理器晚执行。
{{ name }}

djangoAdmin

配置

注册的admin,且admin会依赖auth,contenttpoes,sessions,messages,在创建一个项目的时候,它会自动装上。

INSTALLED_APPS = [
'teacher.apps.TeacherConfig',
'django.contrib.admin', # 默认定义好的
'django.contrib.auth', # 需要的依赖
'django.contrib.contenttypes', # 需要的依赖
'django.contrib.sessions', # 需要的依赖
'django.contrib.messages', #需要的依赖
'django.contrib.staticfiles',
]

其中需要配置TEMPLATES的是'django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',现在是默认设置好了的

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'template')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth', #默认定义好的
'django.contrib.messages.context_processors.messages', #默认定义好的
],
},
},
]

MIDDLEWARE配置

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', #默认定义好的
'django.contrib.messages.middleware.MessageMiddleware', #默认定义好的
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'teacher.middleware.simple_middleware',
]

在根路由中,配置admin,默认已经配置好了

urlpatterns = [
path('admin/', admin.site.urls),
]

至此已经配置好了,但是还需要数据库迁移后就可以了。就可以登录了,使用网址后缀为admin

注册admin账户

第一个用户需要使用命令行创建

使用'python manage.py createsuperuser'命令来创建管理员账号

>>>(django) pyvip@Vip:~/code/crm$ python manage.py createsuperuser
>>>Username (leave blank to use 'pyvip'): admin
>>>Email address: admin@examle.com
>>>Password:
>>>Password (again): This password is too short. It must contain at least 8 characters.
This password is too common.
This password is entirely numeric.
>Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

此时即可登录成功

当前显示的是英文,如需要修改为中文,在settings中设置即可

# 将en-us修改为zh-hans
LANGUAGE_CODE = 'zh-hans'

当前只有用户和组,那还有需要管理表和模型,需要如何操作呢。

注册模型和form让admin去管理

在APP下的admin.py中配置

 from django.contrib import admin
#导入管理的表
from teacher.models import Students, StudentsDetail #注册模型
admin.site.register(Students)
admin.site.register(StudentsDetail)

现在就出现了我们需要的表 :

自定义显示方法,默认显示的是对象方式的。

如果需要显示我们需要的字段,则需要如下写法

class StudentsAdmin(admin.ModelAdmin):

    显示列表的设置

    # 显示的字段
list_display = ['id', 'name', 'sex', 'age', 'qq', 'phone','c_time']
# 可以点击的字段,如果不设置,默认是id可以被点击
list_display_links = ['name']
# 定义可搜索的字段
search_fields = ['name', 'qq', 'phone', 'c_time']
# 过滤器
list_filter = ['sex', 'c_time']
# 每页显示的条数
list_per_page = 3 详情页,添加液的设置
fields = ['name', 'qq'] 分组展示
fieldsets = [
('学生信息', {'fields':['name', 'sex']}),
('详细信息', {'fields':['qq', 'phone']}),
('设置', {'fields':['is_deleted']}),
] fields和fieldsets只能二选一 # 在创建了类之后,需要把类和模型一起注册,才可以生效,需要写在类的下面。
admin.site.register(Students, StudentsAdmin)

显示列表的设置

详情页的分组展示:

python的Web框架,中间件middleware及djangoAdmin的更多相关文章

  1. Python的WEB框架

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. ? 1 2 ...

  2. Python之Web框架Django

    Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址  Python 下载地址:https://www.pyt ...

  3. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

  4. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  5. python 实现web框架simfish

    python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...

  6. Python之Web框架们

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...

  7. python各种web框架对比

    0 引言        python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...

  8. Python3.5学习十八 Python之Web框架 Django

    Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...

  9. python之web框架(3):WSGI之web应用完善

    python之web框架(3):WSGI之web应用完善 1.上篇的web框架太low,只能实现回应固定页面.现在将它进行完善.首先将wsgi和web服务器进行分离,并给予它回复静态页面的能力. we ...

  10. python之web框架(2):了解WSGI接口

    python之web框架(2):了解WSGI接口 1.什么是wsgi接口: wsgi:Web Service Gateway Interface.它不是模块,而只是一种规范,方便web服务器和各种框架 ...

随机推荐

  1. 图解HTTP第一章

    了解 Web 及网络基础 Web 页面是如何呈现的吗? Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等 ...

  2. SGU 176 Flow construction (有源有汇有上下界最小流)

    题意:给定 n 个点,m 条有向边,如果有向边的标号是1的话,就表示该边的上界下界都为容量 ,如果有向边的标号为0的哈,表示该边的下界为0,上界为容量 ,现在问,从 1 到 n 的最小流是多少,并输出 ...

  3. IOPLL动态重配

    连接 Avalon -MM接口 mgmt_waitrequest:当 PLL 重配置进程开始后,此端口变高并在 PLL 重配置期间保持高电平. PLL 重配置进程完成后,此端口变低. I/O PLL重 ...

  4. SimpleCursorAdapter和ListView的结合使用

    我们在用SQLite查数据的时候,经常会用到Cursor这个游标,我们希望能将游标指向的数据直接绑定到ListView中,这样就免去了将游标数据取出然后转换到SimpleAdapter中的麻烦.今天我 ...

  5. Error:(18, 51) java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

    问题:主要是因为jdk版本不一样 解决: 方法一:List<String> list=new ArrayList<Stirng>(); 方法二:重新安装jdk8的版本(安装和配 ...

  6. BASH 环境

    本节内容 1.  什么是shell 2.  命令的优先级 3.  元字符 4.  登录shell与非登录shell 一  什么是shell shell一般代表两个层面的意思,一个是命令解释器,如bas ...

  7. 消息中间件——activeMQ

    Activemq使用教程 解压activmq进入bin\win64 启动activemq.bat 启动成功 浏览器访问http://127.0.0.1:8161 创建maven工程 在pom.xml中 ...

  8. 还原Azure DevOps Server (TFS)中误删除的生成流水线

    流水线历史记录 DevOps Server流水线的历史记录有完善的版本日志,用户可以随时回退到修改过程中的任何一个版本,还能比较差异.这个历史记录功能可以和代码库中的版本控制媲美. 图一:生成历史记录 ...

  9. 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言

    最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...

  10. 漏洞应急响应之批量poc验证

    1.文章难易度 [★★★] 2.文章知识点: python,poc验证; 3.文章作者: 野驴 4.本文参与 i春秋学院原创文章奖励计划,未经许可禁止转载! 0x01前言 当互联网爆出高危漏洞,或者团 ...