python的Web框架,中间件middleware及djangoAdmin
简介
用于处理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的更多相关文章
- Python的WEB框架
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. ? 1 2 ...
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python Flask Web 框架入门
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
- Python之Web框架
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
- python 实现web框架simfish
python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...
- Python之Web框架们
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...
- python各种web框架对比
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
- python之web框架(3):WSGI之web应用完善
python之web框架(3):WSGI之web应用完善 1.上篇的web框架太low,只能实现回应固定页面.现在将它进行完善.首先将wsgi和web服务器进行分离,并给予它回复静态页面的能力. we ...
- python之web框架(2):了解WSGI接口
python之web框架(2):了解WSGI接口 1.什么是wsgi接口: wsgi:Web Service Gateway Interface.它不是模块,而只是一种规范,方便web服务器和各种框架 ...
随机推荐
- 简易数据库实现 UNIX环境高级编程(APUE)第二十章 A Database Library
将课程的源代码 使用C++写了一部分 LINUX WINDOW均可运行 #ifndef MYDB_H #define MYDB_H #include <iostream> #include ...
- trinitycore 魔兽服务器源码分析(二) 网络
书接上文 继续分析Socket.h SocketMgr.h template<class T>class Socket : public std::enable_shared_from_t ...
- drf8 解析器
解析器的介绍 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程. 本质就是对请求体中的数据进行解析. Accept与ContentType请求头. Accept是告诉 ...
- 滑块视图容器 swiper
属性名 类型 默认值 说明 indicator-dots Boolean false 是否显示面板指示点 autoplay Boolean false 是否自动切换 current Number 0 ...
- Oracle实现like多个值的查询
问题背景描述: 某天客户有一个需求,给定一批的手机号码或者电话号码,查询出相关的通话记录,以及相关的一些信息. 客户给定的被叫号码如图所示: 查询出来的结果如下图所示(本批次的结果不是上图导入的结 ...
- Alpha冲刺 - (7/10)
Part.1 开篇 队名:彳艮彳亍团队组长博客:戳我进入作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 改用更易用的springboot+myb ...
- centos下安装nethogs
wget https://github.com/raboof/nethogs/archive/v0.8.1.tar.gzyum install libpcap-develtar zxvf v0.8.1 ...
- first one
我说一句话你就知道我是干什么的 hello world
- hadoop安装hive及java调用hive
1.安装hive 在安装hive前,请确保已经安装好了hadoop,如未安装,请参考centoos 安装hadoop集群进行安装: 1.1.下载,解压 下载hive2.1.1:http://mirr ...
- Java 代码需要使用转义符的地方
1.正则表达式特殊字符 Java 代码中使用到正则表达式里的特殊字符需要使用转义符 \ 进行转义 . ? * + ! ^ $ [ ] ( ) \ 因为反斜线 \ 也是特殊字符,所以转义需双反斜线 \\ ...