Django之CBV装饰器、中间件、csrf跨站请求

发布时间 2023-08-11 15:36:57作者: 凡人半睁眼

一、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、

3、

 

 

三、csrf跨站请求

1、

2、

3、