Django 12 中间件、上下文处理器和admin后台

一、中间件

#Django中间件 (Middleware)
# 一个轻量级、底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入和输出

  中间件的执行顺序

#请求以自上而下的顺序通过所有的层,view函数处理过后,响应以自下而上的顺序通过所有的层,期间经过的各个中间件都会对请求和响应进行处理

  中间件的结构

#中间件中可以定义5个方法,分别是:

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

  中间件的配置

#1、在项目目录下创建一个middleware.py文件

#2、配置方法一
from django.utils.deprecation import MiddlewareMixin #中间件的类
from django.http import HttpResponse
class MyException(MiddlewareMixin): def process_request(self,request): #方法名是固定的
print('这是自定义的process_request')
return None #因为没有结束,所以不需要返回响应 def process_view(self,request,callback,args,kwargs):
print('这是自定义的process_view')
return None def process_exception(self,request,exception):
return HttpResponse(exception) #这几种方法可以按需求来配置,并不是都需要配置 #2、配置方法二
from test22.models import User
class UserMiddleWare(object):
def __init__(self,get_response):
self.get_response = get_response def __call__(self,request):
username = request.session.get('username','未登录')
user = User.objects.filter(username=username).first()
if user:
setattr(request,'my_user','user.username') #给request这个对象添加一个名为myuser的属性,属性内容为user.username
else:
setattr(request,'my_user','游客')
response = self.get_response(request) #这是request和response的分界线;前面的是到达视图函数之前执行,后面的是到达浏览器之前执行 return response #必须给一个响应 #3、注册中间件
#在settings.py里面的MIDDLEWARE里面添加上面两个类
'myblog.middleware.MyException',
'myblog.middleware.UserMiddleWare',

二、上下文处理器

  为了满足在多个模板里面都能使用某个变量,在上下文处理器中设置这个变量即可

#在模板中想要使用的变量是从视图函数中的context这个上下文的参数中传递进来的,每个视图函数需要什么参数就传什么参数.

#上下文处理器就是创建模板变量.

#1、在项目目录下创建一个xx.py文件(一般取名为processcontent.py)

#2、在该文件中添加函数

from test22.models import User
def my_user(request):
username = request.session.get('username','未登录') #获取session的username
user = User.objects.filter(username=username).first() #验证数据库是否有这个username
if user:
return {'my_user':user.username} #返回的必须是字典类型
else:
return {'my_user':'游客'} #3、注册
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'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',
'myblog.myprocesscontent.my_user', #项目名-py文件名-函数名(这一条就是注册)
],
},
},
]

  总结

#我们用中间件和上下文处理器完成了跟登录用户有关的例子, 最后的结果都是能在页面上显示用户的用户名了.
#中间件是在用户请求到响应的过程中去加入一些额外的逻辑功能,
#例子中给request增加了一个myuser的属性.
#上下文是给所有的模板增加变量
#例子中给模板增加了一个myuser的变量.

三、admin后台

  admin后台介绍

#为你的员工或客户生成一个用户添加,修改和删除内容的后台是一项缺乏创造性和乏味的工作。因此,Django 全自动地根据模型创建后台界面。

#Django 产生于一个公众页面和内容发布者页面完全分离的新闻类站点的开发过程中。站点管理人员使用管理系统来添加新闻、事件和体育时讯等,这些添加的内容被显示在公众页面上。
#Django 通过为站点管理人员创建统一的内容编辑界面解决了这个问题。
#管理界面不是为了网站的访问者,而是为管理者准备的。

  admin创建用户

manage python createsuperuer #创建超级用户(管理员) 然后按步骤写入username、email、password

  修改admin内语言、时区,settings.py里面

  在app里面的admin.py写入

from django.contrib import admin

# Register your models here.

from .models import Department,Student,Stu_Detail,Course

class DepartmentAdmin(admin.ModelAdmin):
list_display = ['d_id','d_name'] #按表格的形式来排列
list_display_links = ['d_id','d_name'] #表示给这两列数据加上a标签
list_filter = ['d_id'] #以d_id来过滤
search_fields = ['d_name'] #以d_name来搜索 class Stu_DetailAdmin(admin.ModelAdmin):
fields = ['student','age','city'] #分组1
fieldsets = [
('第一组',{'fields':'student'}),
('第一组', {'fields': ['age','city','gender']}), #分组2 ] admin.site.register(Department,DepartmentAdmin) #注册
admin.site.register(Student)
admin.site.register(Stu_Detail,Stu_DetailAdmin)
admin.site.register(Course)

Django 12 中间件、上下文处理器和admin后台的更多相关文章

  1. Django——12 中间件 上下文处理器 admin后台

    Django 中间件 中间件介绍 中间件的第一个例子 中间件的第二个例子 上下文处理器 admin后台管理   中间件 Django中间件(Middleware)是一个轻量级.底层的“插件”系统,可以 ...

  2. 潭州课堂25班:Ph201805201 django框架 第十二课 自定义中间件,上下文处理,admin后台 (课堂笔记)

    中间件 在项目主目录下的配置文件 在项目主目录下创建文件 写个自定义异常处理 方法1 要让其生效,要在主目录下,的中间件中进行注册 主目录下.该文件名.类名 在进入视图函数之前进行判断,  给 req ...

  3. centos 下 django 1.8 配置好后 admin 后台无法显示 样式解决办法

    解决前 解决命令 [root@ayibang-server static]# cat /etc/nginx/conf.d/office_djaong_uvpv.conf server { listen ...

  4. django上下文处理器

    上下文处理器(context processors)上下文处理器是可以返回一些数据,在全局模板中都可以使用.比如登录后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每 ...

  5. django之中间件、缓存、信号、admin内置后台

    目录: 中间件 缓存 信号 admin后台 一.中间件 1.什么是中间件? 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的 ...

  6. Django - 请求与响应、表单、中间件、上下文处理器

    请求与响应篇 一.HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象.视图函数的第一个参数(request)是HttpRequest对象在djang ...

  7. Django中间件之实现Admin后台IP白名单

    Django自带的Admin管理后台很方便,但是实际生产环境真的会有挺多安全问题的,在admin的安全防护这方面,我之前就研究实现了给admin加上登录验证码和限流功能,可以参考这篇文章: 不过就在内 ...

  8. Django框架基础知识12-中间件及上下文处理器

    Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...

  9. python自动化开发-[第二十一天]-form验证,中间件,缓存,信号,admin后台

    今日概要: 1.form表单进阶 2.中间件 3.缓存 4.信号 5.admin后台 上节课回顾 FBV,CBV 序列化 - Django内置 - json.dumps(xxx,cls=) Form验 ...

随机推荐

  1. jquery ajax中error返回错误解决办法

    转自:https://www.jb51.net/article/72198.htm 进入百度搜索此问题,发现有人这么说了一句 Jquery中的Ajax的async默认是true(异步请求),如果想一个 ...

  2. 部署和调优 1.8 samba 部署和优化-2

    Samba 可以实现 Linux 和 Windows 机器相互共享文件,这对我们来说是非常实用的.下面做几个实践,来了解samba,注意:在实践之前,请先检测 Selinux 是否关闭,否则可能会实践 ...

  3. WebRTC的拥塞控制技术<转>

    转载地址:http://www.jianshu.com/p/9061b6d0a901 1. 概述 对于共享网络资源的各类应用来说,拥塞控制技术的使用有利于提高带宽利用率,同时也使得终端用户在使用网络时 ...

  4. 给Activity切换过程添加动画效果

    首先,在资源文件中定义一些动画效果 例如: <scale android:duration="@android:integer/config_mediumAnimTime" ...

  5. cocos2dx中替代goto的用法:do{}while(0)和CC_BREAK_IF

    我们时常会调用某个函数来创建一个对象,但由于内存不足或其他异常情况发生时对象可能会创建失败,创建失败我们就要结束当前程序转到错误处理地方去处理错误或释放已生成的对象. int* p1 = new in ...

  6. Realsense深度相机资料

    1.Realsense SDK 2.0 Ubuntu 16.04 安装指导网址 https://github.com/IntelRealSense/librealsense/blob/master/d ...

  7. Android 菜单之子菜单SubMenu

    子菜单就是在点击了菜单中的选项后弹出的要对菜单中选项操作的菜单           他的操作与之前的两种类型的菜单操作差不多 动态添加 @Override public boolean onCreat ...

  8. 《Effective Java》第5章 泛型

    第23条:请不要在新代码中使用原生态类型 声明中具有一个或者多个类型参数( type parameter)的类或者接口,就是泛型(generic)类或者接口. 每种泛型定义一组参数化的类型(param ...

  9. 二维码的生成细节和原理 -- 转http://news.cnblogs.com/n/191671/

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  10. repo的一些用法

    repo的用法注:repo只是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库.(也就是说,他是用来管理给git管理的一个个仓库的) 1.下载r ...