django 的用户登录验证模块,为什么登录之后在模板页面取不到 user?

2014-06-25 14:50:21 +08:00
 pythonfan
自定义了AUTHENTICATION_BACKENDS,重写了authenticate方法,改完之后可以正常登录了,但是在模板页却取不到user的值,求指教。。。
登录方法部分代码如下:
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = request.POST.get('username', '')
password = request.POST.get('password', '')
# cd = form.cleaned_data
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
user_login(request, user)

print user.username
return HttpResponseRedirect('/index')

在首页的模板页面,<label class="search_label">欢迎您:{{user.username}}</label>
一直取不到user的值
4373 次点击
所在节点    Python
9 条回复
messense
2014-06-25 14:58:05 +08:00
Django Auth 的 user 是在 request.user 上的,试试 render(request, 'index.html', { 'user': request.user })
kenis
2014-06-25 15:00:57 +08:00
{{ request.user.username }}
guoqiao
2014-06-25 15:22:13 +08:00
@messense
@kenis
一直都是在模板里直接访问user的,写request.user不累么?
只需要确保如下的配置存在:

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
)

而这个是Django默认配置.
楼主访问不到user, 看看是不是修改了这个默认配置.
pythonfan
2014-06-25 15:54:20 +08:00
@guoqiao 已经加了呢,直接用user.username取不到值。。。
pythonfan
2014-06-25 15:54:37 +08:00
@kenis 这样确实可以,谢谢
pythonfan
2014-06-25 15:56:35 +08:00
@messense 转到某个具体页面是直接可以访问的,但是重定向到某个view方法,直接访问user.username就不行。。。
guoqiao
2014-06-25 16:08:38 +08:00
几个猜测:
1. 你的user_login方法是自带的那个login方法的别名还是自己写的?
2. 你在authenticate中创建user时, is_active有设置吗? 如果没有,这里的user_login是调用不到的.
3. authentication backend除了要写authenticate方法外,还要写另外一个方法:

def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
pythonfan
2014-06-26 14:38:45 +08:00
@guoqiao
1、user_login是自带的方法
2、is_active为True
3、get_user方法也已经加了

跟这个HttpResponseRedirect('/index')是不是有关系呢?我直接转到一个页面上是可以取到的。
guoqiao
2014-06-26 14:46:02 +08:00
@pythonfan
有点意思.
如果代码在github上,给个地址. 仅靠这段没有缩进的代码, 信息还是太少了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/119457

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX