django中有关登陆验证的LoginRequiredMixin类

   通常情况判断一个用户是否登陆可以使用 request.user.is_is_authenticate(),就可以完成,返回结果TRUE或者FALSE

 

class UserCenterInfoView(View):
    def get(self,request):
        if  request.user.is_authenticated():
            return render(request,"用户中心_info.html")
        else:
            return render(request,"login.html")

虽然可以判断出来是否登陆,系统很多地方都需要判断是否登陆,不能频繁的增加这类代码,于是,django系统就把这段代码进行封装,封装类就是LoginRequiredMimin

class LoginRequiredMixin(AccessMixin):
    """Verify that the current user is authenticated."""
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return self.handle_no_permission()
        return super().dispatch(request, *args, **kwargs

由于如果没有登陆,返回return self.handle_no_permission(),执行LoginRequiredMixin的父类AccessMixin的方法,因为他没有这个方法;
    def handle_no_permission(self):
        if self.raise_exception or self.request.user.is_authenticated:
            raise PermissionDenied(self.get_permission_denied_message())
        return redirect_to_login(self.request.get_full_path(), self.get_login_url(), self.get_redirect_fie

就会重新跳转到登陆 redirect_tp_login;

如果要使用 LoginRequiredMixin,可以直接继承例如:

class AddressView(LoginRequiredMixin,View):
    def post(self,request):

 

posted @ 2023-02-08 15:47  dayu2020  阅读(71)  评论(0编辑  收藏  举报