Django之CBV装饰器、中间件、csrf跨站请求
一、CBV装饰器
要求:访问CBV函数视图需要先登录
1、含cookie的装饰器
# 登录认证装饰器cookie版
def login_auth(func):
def inner(request, *args, **kwargs):
if request.COOKIES.get('username'):
return func(request, *args, **kwargs)
else:
return redirect('/login1/')
return inner
2、views 视图函数
需要导入method_decorator装饰器模块
第一种方式:在方法上加装饰器
from django.views import View
from django.utils.decorators import method_decorator
class Login(View):
# 必须登录之后才能访问get访问
@method_decorator(login_auth)
def get(self, request):
return HttpResponse("get")
@method_decorator(login_auth)
def post(self, request):
return HttpResponse("post")
第二种方式:在类上加装饰器
from django.views import View
from django.utils.decorators import method_decorator
@method_decorator(login_auth, name='get')
@method_decorator(login_auth, name='post')
class Login(View):
# 必须登录之后才能访问get访问
def get(self, request):
return HttpResponse("get")
def post(self, request):
return HttpResponse("post")
注意:第二个参数name=‘’, 跟的是方法名
第三种方式:重写View类的 dispatch方法
from django.views import View
from django.utils.decorators import method_decorator
class Login(View):
@method_decorator(login_auth)
def dispatch(self, request, *args, **kwargs):
return super(Login, self).dispatch(request, *args, **kwargs)
# 必须登录之后才能访问get访问
def get(self, request):
return HttpResponse("get")
def post(self, request):
return HttpResponse("post")
二、中间件
1、默认的7个中间件的作用
1. django.middleware.security.SecurityMiddleware:提供了一些安全性功能,如点击劫持(clickjacking)保护、XSS(跨站脚本)保护等。它会自动添加适当的HTTP头,以增强应用的安全性。 2. django.contrib.sessions.middleware.SessionMiddleware:处理(session\cookie)数据。它为每个用户提供一个独立的会话,可以在多个HTTP请求之间存储临时数据。 3. django.middleware.common.CommonMiddleware:处理一些常见的HTTP头,如Content-Type,以及处理URL尾部的斜杠,确保URL的一致性。 4. django.middleware.csrf.CsrfViewMiddleware:处理CSRF(跨站请求伪造)保护。它会检查POST、PUT、DELETE等非安全请求中的CSRF令牌,以防止CSRF攻击。 5. django.contrib.auth.middleware.AuthenticationMiddleware:处理用户认证。它会根据用户登录状态和会话信息将用户对象添加到每个请求中。 6. django.contrib.messages.middleware.MessageMiddleware:处理消息通知,如使用messages模块在请求之间传递消息。 7. django.middleware.clickjacking.XFrameOptionsMiddleware:提供点击劫持(clickjacking)保护。它设置X-Frame-Options HTTP头,指示浏览器是否允许在<frame>、<iframe>、<embed>或<object>中显示页面。
2、自定义中间件
中间件就是一个类,然后这个类都继承了 MiddlewareMixin
其中 process_request 和 process_response 方法比较重要,其他方法看需求使用如:process_view、process_template
class MyMiddleware1(MiddlewareMixin):
def process_request(self, request):
# IP限制
#
print("我是第一个自定义的中间件process_request")
def process_response(self, request, response):
print("我是第一个自定义中间件的process_response")
return response # 每一个process_response都必须有返回值response
class MyMiddleware2(MiddlewareMixin):
def process_request(self, request):
print("我是第二个自定义的中间件process_request")
def process_response(self, request, response):
print("我是第二个自定义中间件的process_response")
return response # 每一个process_response都必须有返回值response
注意:自定义中间件步骤:
1. 在项目名下或者任意的应用名下创建一个文件夹
2. 在这个文件夹下面创建一个py文件
3. 在该py文件中写一个自定义的类必须要继承MiddlewareMixin
4. 写完之后紧接着一定要去配置文件中注册中间件
3、中间件的执行顺序
执行顺序按照在MIDDLEWARE中定义的顺序,从上到下执行。
当一个请求进来时,这些中间件会依照这个顺序逐个处理请求(process_request)
然后在请求返回响应阶段按照相反的顺序逐个处理响应(process_re)
三、csrf跨站请求
1、
2、
3、