djang中的特定页失去身份验证

2024-04-26 19:04:20 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我在登录后移动特定页面,我将失去django中的身份验证。 如果我移动另一个页面,我就可以在没有登录的情况下再次获得身份验证。你知道吗

def user(request, user_id):
    """
    Display a user

    :param request: request
    :param user_id: user id
    :return: render
    """
    _user = get_object_or_404(User, id=user_id)
    _groups = _user.groups

    return render(
        request,
        'archive/user/user.html',
        {
            'user': _user,
            'groups': _groups.exclude(privacy='CLOSED'),
        }
    )

这是有问题的视图代码。你知道吗


Tags: django身份验证idgetreturnobjectparamrequest
2条回答

如果您愿意,也可以使用这种方式登录,效果非常好:

class Login(View):
    template_name = ['your_app_name/login.html', 'your_app_name/home.html']

def get(self, request, *args, **kwargs):
    form = UsersForm()
    return render(request, self.template_name[0],{"form":form,})


def post(self, request, *args, **kwargs):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        #if login is succesfull it takes you to home page:
        return render_to_response(self.template_name[1],RequestContext(request))
    else:
        #if is not, takes you to login page again
        return HttpResponseRedirect(reverse('cost_control_app:login'))

如果有基于类的视图,应该使用LoginRequiredMixins。 这将检查用户是否通过了访问页面的身份验证。 如果经过身份验证,则会显示该页面,否则可以再次重定向到登录页面。你知道吗

示例:

from django.contrib.auth.mixins import LoginRequiredMixin

class home(LoginRequiredMixin,View):
    login_url = "/"
    def get(self,request):
        user = request.user
        s = Person.objects.get(pk=user.id)
        return render(request,'chat/home.html',locals())

在上面的示例中,login\u url是提供重定向链接的地方,如果用户未通过身份验证。在这里,我已经重定向到根,即登录页。 您可以这样定义视图。你知道吗

对于基于函数的视图,可以使用登录所需的装饰器。你知道吗

为了安全起见,还应该使用Django会话。你知道吗

相关问题 更多 >