django使用REST-framework 使用重写类视图所遇问题记录

1.禁止某个类视图post的csrf验证:

from rest_framework.authentication import SessionAuthentication as OriginalSessionAuthentication

class PassCSRFAuthentication(OriginalSessionAuthentication):
    def enforce_csrf(self, request):
        return
        
class TestView(APIView):  
    #通过设置类权限成员,使得该post方法无需csrf验证
    authentication_classes = (PassCSRFAuthentication,)
    def post(self, request, format=None):
        return Response('{}')
    

2.无法使用装饰器@login_required来判断请求是否登录,并跳转:

自定义装饰器解决此问题:

from functools import wraps

#自定义登录判断装饰器
def check_login(func):
    @wraps(func)
    def inner(self, request):
        if request.user.is_authenticated:
            print('user has logined')
            return func(self, request)
        else:
            return redirect('/login/')#未登录跳转的路由
    return inner  


#装饰器使用

class TestView(APIView):  
    #通过设置类权限成员,使得该post方法无需csrf验证
    authentication_classes = (PassCSRFAuthentication,)
    @check_login
    def post(self, request, format=None):
        return Response('{}')

 

你可能感兴趣的:(python,服务器开发)