Django 五——中间件、缓存、CSRF、信号、Bootstrap(模板)
内容概要:
1、Django的请求生命周期是怎么样的?
2、中间件
3、CSRF补充
4、信号
5、Bootstrap(模板)
1、Django的请求生命周期是怎么样的?
(即请求发起到返回都经历了什么?)
用户发起请求,经过中间件,到达路由系统,分发给views是凸函数,然后去数据库拿数据,去模板中拿模板,经过渲染,在经过中间件返回给用户。
2、中间件
用处:可用于做过滤器,过滤黑名单,适用于所有的请求都要处理的情况
(而只需要对某些请求做处理时,直接在views函数里面写装饰器即可)
自定义方法
md文件夹中==》hxl.py
from django.utils.deprecation import MiddlewareMixin
class MyMiddlewareMixin(object): #将MiddlewareMixin类里面的东西拿过来复制一份,重命名类,
# 自己定义的中间件就继承重命名后的类,这样以后不管版本如何变化,都能这样来定义中间件
def __init__(self, get_response=None):
self.get_response = get_response
super(MyMiddlewareMixin, self).__init__()
def __call__(self, request):
response = None
if hasattr(self, 'process_request'):
response = self.process_request(request)
if not response:
response = self.get_response(request)
if hasattr(self, 'process_response'):
response = self.process_response(request, response)
return response
class HXL(MyMiddlewareMixin):
def process_request(self,request):
print('hxl-->process_request')
def process_response(self,request, response):
print('hxl-->process_response')
return response
class GYC(MyMiddlewareMixin):
def process_request(self,request):
print('gyc-->process_request')
def process_response(self,request, response):
print('gyc-->process_response')
return response
settings.py里面
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',
'md.hxl.HXL',
'md.hxl.GYC',
]
urls.py里面
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
views.py里面
from django.shortcuts import render,HttpResponse
def index(request):
print('test')
return HttpResponse('test!!!')
3、缓存(3种应用,5种配置)
(1)全站缓存:settings里面加两个中间件
(2)单独视图缓存
(3)视图函数里面的某一块缓存
4、CSRF(跨站伪造请求)
全站都用csrf时:
Form提交时:
(1)、需用render
(2)、{% csrf_token %}
ajax提交时:
(1)、在cookie中提取创始人斧头砍对应的随机字符串
(2)、设置请求头:
X-CSRFToken:cookie中取到得值
或用$.ajaxsetup
全站都不用,仅某几个用csrf,用装饰器@csrf_protect
全站都用,仅某几个不用csrf时,用装饰器@csrf_exempt
5、信号
Django内部定义的信号,可在制定的位置注入指定的操作
——内置信号:
a指定信号中注入函数
——自定义信号:
a创建信号
b指定信号中注入函数
c在程序中触发函数
6、Bootstrap(模板)——响应式+模板
即集成了css和js的文件夹
css——响应式:用@media,如container、栅(shan)格
js——应用:先引入jquery.js,再引入bootstrap.js
多看模板
参考博客:
wu.sir
http://www.cnblogs.com/wupeiqi/articles/5246483.html
浙公网安备 33010602011771号