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",
)