特定页面在django中失去身份验证

时间:2015-12-26 06:27:58

标签: python django authentication

如果我在登录后移动特定页面,我将失去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'),
        }
    )

这是有问题的视图代码。

2 个答案:

答案 0 :(得分:1)

如果拥有基于类的视图,则应使用 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_url 是您提供重定向链接的位置。在这里,我已重定向到根,即登录页面。 你可以像这样定义你的观点。

对于基于功能的视图,您可以使用 login_required装饰器

您还应该使用Django会话来保证安全。

答案 1 :(得分:0)

如果你愿意,也可以用这种方式登录,就像魅力一样:

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'))
相关问题