Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 特定页面在django中失去身份验证_Python_Django_Authentication - Fatal编程技术网

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

Python 特定页面在django中失去身份验证,python,django,authentication,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

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

这是有问题的查看代码。

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

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会话进行安全保护。

如果您在访问上面的视图后不登录就可以继续访问站点,您如何知道您失去了身份验证?@Andriy我使用此代码,
{%if user.is_authenticated%}
。该页面仅返回false,但其他页面在登录后返回true。您确定传递到url的
user\u id
正确吗?由于
\u user=get\u object\u或
无法获取正确的用户…请尝试将
RequestContent(request)
添加到render方法中,因此将
render(yourParams)
替换为
render(yourParams,RequestContent(request))
@andry,谢谢您的回复。我发现了这个问题,它是由
'user':\u user
引起的。我使模板
user
覆盖我的用户。