Django—— FBV/CBV强制与放行csrf_token认证

csrf_toekn认证机制:

django中对POST请求,csrf会进行认证处理,csrf认证机制是防御跨站伪造功能,在没有任何处理的前提下,POST请求会报错。csrf认证中间件是在process_view执行(通过装饰器强制认证或者放行可知,并不是走process_request中间件。),同时对类中的方法进行CSRF装饰器操作需要:

# 注意:FBV只能添加在dispatch方法上(或者装饰在类上指定dispatch方法),类中单独方法无效。
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator

FBV(function+base+view):在视图里使用函数处理请求。

CBV(clalss+base+view):在视图里使用类处理请求。

CBV优点:
提到代码复用性与灵活性,避免冗余代码
引入面向对象技术,可读性高,可继承
不同的请求函数可以针对不同的HTTP请求

案例:

FBV:
# 导入csrf_exempt, csrf_protect
from django.shortcuts import render, HttpResponse
from django.views.decorators.csrf import csrf_exempt, csrf_protect

@csrf_exempt  # FBV不做csrf_toke认证 反之:@csrf_protect
def users(request):
    return HttpResponse('FBV')
CBV:
from django.views import View
# 导入csrf_exempt, csrf_protect,method_decorator
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator

@method_decorator(csrf_exempt, name='dispatch')  # 方法1:CBV不做csrf_token验证(单独添加无效方法无效);反之:@csrf_protect。
class StudentsView(View):

    @method_decorator(csrf_exempt)  # 方法2:CBV不做csrf_token验证(单独方法无效);反之:@csrf_protect。
    def dispatch(self, request, *args, **kwargs):
        return super(StudentsView, self).dispatch(request, *args, **kwargs)
        
# 根据请求方式不同,处理不同逻辑。
    def get(self, request, *args, **kwargs):
        return HttpResponse('GET')

    def post(self, request, *args, **kwargs):
        return HttpResponse('POST')

    def delete(self, rquest, *args, **kwargs):
        return HttpResponse('DELETE')

    def put(self, request, *args, **kwargs):
        return HttpResponse('PUT')
模板文件:

post请求(get不需要):form下添加 {% csrf_token %}

<form method='POST'>
	{% csrf_token %}
	<div>...<div>
</form>
AJAX:

方法很多种,大家可以参考。
转载:Django 使用 ajax 和通过 csrf 认证的三种方式

最后:祝大家节日快乐

猜你喜欢

转载自blog.csdn.net/weixin_44053341/article/details/109265163
今日推荐