简介

用于处理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. GUI学习之〇——PyQt5安装

    GUI(Graphical User Interface)是程序和软件使用者的接口,好的GUI是一个良好的软件的前提,在这里演示一下用PyQt5做一个GUI的方法 软件需求:python3.6 用的是 ...

  2. 51nod 1344

    一个很简单的算法题,求最小的前缀和,就是要注意数据范围要开一个longlong #include<iostream> using namespace std; int main() { i ...

  3. SAS语言结构

    SAS程序用于访问.管理.分析和展现数据.其基础组成部分是 DATA步和PROC步,PROC步又称为SAS过程.一个SAS程序可包含以 任意顺序组合的多个DATA步和多个PROC步. DATA步通常用 ...

  4. (PMP)第13章-----项目相关方管理

    13.1 识别相关方 1 相关方分类的方法: 1.1 权力/利益方格,权力/影响方格,影响/作用方格(小型项目,关系简单) 权力:基于相关方的职权级别: 利益:对项目成果的关心程度 影响:对项目成果的 ...

  5. w9 Ansible批量管理与维护

    Ansible是2013年推出的一种通用自动化工具,可用于配置管理或工作流程自动化.配置管理是一种“基础架构代码”实践,它将事物编码,例如应该在系统上安装什么包和版本,或者应该运行什么守护进程.工作流 ...

  6. Python数字与字符之间的转换

    Python数字与字符之间的转换 命令 意义 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 co ...

  7. git diff 理解

    0. 理解 git diff 返回信息 1. 命令 $ git diff README.md 2. 返回信息,注解 diff --git a/README.md b/README.md ## 1. 表 ...

  8. [算法专题] 二分搜索&排序数组

    基础知识 二分非递归写法: int binary_search(const int a[], const int size, const int val) { int lower = 0; int u ...

  9. wpf使用FFMEPG录制屏幕

    Simple function of recording screen based on ffmpeg Using WPF环境 Visual Studio 2017,dotNet Framework ...

  10. 记web模拟手机环境已经微信开发者工具中可正常运行,实体机运行报错问题

    问题描述: 有个手机微信OA的项目 用户信息采用cookie方式保存.发布后使用chorme浏览器进行模拟访问测试发现一切运行顺畅,使用微信开发者工具进行测试也一切正常. 采用实体机进行测试时,用微信 ...