Python Django注册后自动登录

Python Django注册后自动登录,python,django,Python,Django,我正在尝试让用户在注册后自动登录。但是,用户似乎只在呈现下一个html页面时才登录(user.is\u authenticated在我的模板中返回True),然后立即注销(request.user在我在下一页通过AJAX调用的方法中返回AnonymousUser-移动到另一页也会表明您不再登录,因为我的模板会再次呈现登录而不是注销链接)。如果我尝试注释代码,则authenticate()始终不会返回任何 我做错了什么 def signup_view(request): if reques

我正在尝试让用户在注册后自动登录。但是,用户似乎只在呈现下一个html页面时才登录(
user.is\u authenticated
在我的模板中返回True),然后立即注销(
request.user
在我在下一页通过AJAX调用的方法中返回AnonymousUser-移动到另一页也会表明您不再登录,因为我的模板会再次呈现登录而不是注销链接)。如果我尝试注释代码,则
authenticate()
始终不会返回任何

我做错了什么

def signup_view(request):
    if request.method == 'POST':
        form = UserSignUpForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            send_confirmation_email(user, current_site.domain)
            # user_login = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password1'])
            # login(request, user_login)
            login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            args = {'user': user}
            return render(request, 'accounts/signup_success.html', args)
    else:
        form = UserSignUpForm()
    args = {'form': form, 'project_name': settings.PROJECT_NAME}
    return render(request, 'accounts/signup.html', args)

请使用以下代码行。它可能完全满足您的要求

def signup(request):
if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data.get('username')
        raw_password = form.cleaned_data.get('password')
        user = authenticate(username=username, password=raw_password)
        login(request, user)
        return redirect('records:dashboard')
else:
    form = UserCreationForm()
return render(request, 'registration/signup.html', {'form': form})

如果您正在设置
user.is\u active=False
,则用户将无法登录。我不相信这一点。如果我使用我的登录页面,它对非活动用户有效,基本上与注释的代码相同。但我会尝试。
user.is\u active=False
已设置。当您希望用户登录时,为什么设置为False?请尝试ing为True并取消对
authenticate()的注释
功能。该死的,它可以工作,而且实际上是有意义的。但是我如何实现自动登录用户并让他确认他的电子邮件地址我还没有尝试过这个建议。但是你可以尝试相同或类似的方法。你可以发电子邮件确认并将会话到期时间设置为注销。一旦用户单击确认,请按原样更新一些falg_已确认,类似于处于活动状态,并使会话过期以注销(客户端和服务器端逻辑也是如此)。希望这有帮助。