繁体   English   中英

Django登录(请求,用户)不将用户置于会话中?

[英]Django login(request, user) don't put user in session?

我似乎无法弄清楚如何在Django中登录用户。 我很困惑,因为文档明确地告诉您如何执行此操作,但仍然以某种方式我必须犯错。

链接https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.login表示“要从视图中登录用户,请使用login()。 HttpRequest对象和一个User对象。login()使用Django的会话框架将用户的ID保存在会话中。”

所以我有以下views.py:

def login_view(request):
    if request.method == 'GET':
        return render(request, 'app/login.htm')
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = auth.authenticate(username=username, password=password)
        if user is None:
            return HttpResponseRedirect(reverse('error'))
        if not user.is_active:
            return HttpResponseRedirect(reverse('error'))

        # Correct password, and the user is marked "active"
        auth.login(request, user)
        # Redirect to a success page.
        return HttpResponseRedirect(reverse('home'))

def home(request):
    contextdict = {}
    if request.session.user.is_authenticated():
        contextdict['username'] = request.session.user.username
    context = RequestContext(request, contextdict )
    return render(request, 'app/home.htm', context)

现在,通过使用打印'qqq',我知道'is None'和'not is_active'已被评估为True的事实,因此对auth.login进行了评估,并返回了HttpResponseRedirect。 我希望一切都可以正常进行,并且希望用户能够登录,并且希望将用户名作为上下文传递到主视图中。 但是,Django给了我以下错误:

AttributeError at /app/home/
'SessionStore' object has no attribute 'user'

是的,我不知道我在做什么。

您应该使用request.user获取用户对象,而不是request.session.user

会话中的数据用于检索用户对象,但该会话不包含实际用户

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM