Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Django 用户未登录。模板无法访问用户属性_Django_Authentication_Login - Fatal编程技术网

Django 用户未登录。模板无法访问用户属性

Django 用户未登录。模板无法访问用户属性,django,authentication,login,Django,Authentication,Login,我是新来的阿法托·德扬戈。我一直在尝试为我的应用程序开发用户身份验证。我使用AuthenticationForm作为表单,使用FormView作为登录视图。我还构建了一个自定义后端,它使用电子邮件地址而不是用户名对用户进行身份验证。身份验证似乎工作正常,因为它在提供正确的电子邮件和密码时返回用户对象,否则会显示错误。而表单\u valid()将我带到“成功”url”。但当我试图访问用户名或电子邮件等用户属性时,我无法在模板(success\u url)中访问它们。而且user.is\u auth

我是新来的阿法托·德扬戈。我一直在尝试为我的应用程序开发用户身份验证。我使用
AuthenticationForm
作为表单,使用FormView作为登录视图。我还构建了一个自定义后端,它使用电子邮件地址而不是用户名对用户进行身份验证。身份验证似乎工作正常,因为它在提供正确的电子邮件和密码时返回用户对象,否则会显示错误。而
表单\u valid()
将我带到“
成功”url
”。但当我试图访问用户名或电子邮件等用户属性时,我无法在模板(success\u url)中访问它们。而且
user.is\u authenticated
似乎返回False。有什么不对劲吗?我花了几个小时试图解决这个问题,但还没有成功。非常感谢您的指导和建议。提前谢谢

这是我的
登录视图:

类登录视图(FormView):

以下是success_url的视图:

def hello(request):
    return render(request,"draint_user/hello.html",{})
这是我的hello.html(模板)


{%if user.u经过身份验证%}
欢迎,{{user.get_username}}。感谢您登录

{%else%} 欢迎新用户。请登录

{%endif%}
默认情况下,模板上下文中没有
用户。您可以手动添加它,也可以通过激活
django.core.context\u processors.request
context processor将整个请求添加到上下文中

回应评论:

  • 您可以在视图中定义
    get\u context\u data
    ,将
    user
    对象添加到您的上下文中:

        def get_context_data(self, **kwargs):
            # getting default context for view
            context = super(LoginView, self).get_context_data(**kwargs)
    
            # adding user into context
            context['user'] = self.request.user
    
            # returning new context
            return context
    
  • 您可以编辑settings.py文件并添加

    TEMPLATE_CONTEXT_PROCESSORS = (
        "django.contrib.auth.context_processors.auth",
        "django.core.context_processors.debug",
        "django.core.context_processors.i18n",
        "django.core.context_processors.media",
        "django.core.context_processors.static",
        "django.core.context_processors.tz",
        "django.contrib.messages.context_processors.messages",
        "django.core.context_processors.request",
    )
    

  • (这是django 1.7中的默认
    TEMPLATE\u CONTEXT\u PROCESSORS
    ,其中添加了
    django.core.CONTEXT\u PROCESSORS.request
    ),或者如果您已经在设置中定义了
    TEMPLATE\u CONTEXT\u PROCESSORS
    ,只需向其中添加
    django.core.CONTEXT\u PROCESSORS.request
    。现在,您可以访问每个模板中的
    request.user

    实际上,从这里阅读:

    render()与使用强制使用RequestContext的context_实例参数将_呈现给_response()的调用相同


    因此,您可以尝试以
    请求的方式访问用户对象。用户
    在您的模板中

    我没有真正理解您的意思。我是说我应该怎么做,应该在settings.py中做点什么?这不是真的。
    auth
    上下文处理器是默认的,在显示的设置代码段中首先列出,它将
    auth
    添加到上下文中。请求一只添加
    请求
        def get_context_data(self, **kwargs):
            # getting default context for view
            context = super(LoginView, self).get_context_data(**kwargs)
    
            # adding user into context
            context['user'] = self.request.user
    
            # returning new context
            return context
    
    TEMPLATE_CONTEXT_PROCESSORS = (
        "django.contrib.auth.context_processors.auth",
        "django.core.context_processors.debug",
        "django.core.context_processors.i18n",
        "django.core.context_processors.media",
        "django.core.context_processors.static",
        "django.core.context_processors.tz",
        "django.contrib.messages.context_processors.messages",
        "django.core.context_processors.request",
    )