首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在django中注册后自动登录用户

如何在django中注册后自动登录用户
EN

Stack Overflow用户
提问于 2010-07-11 17:33:39
回答 3查看 33.4K关注 0票数 77

这是我目前用于注册的内容:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            messages.info(request, "Thanks for registering. Please login to continue.")
            return HttpResponseRedirect("/dashboard/")
    else:
        form = UserCreationForm()
    return render_to_response("accounts/register.html", {
        'form': form,
    }, context_instance=RequestContext(request))

是否可以在创建帐户后不要求用户手动登录,而是简单地自动登录?谢谢。

编辑:我尝试了login()函数,但没有成功。我认为问题在于没有设置AUTHENTICATION_BACKENDS。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-11 17:36:10

使用authenticate()login()函数:

from django.contrib.auth import authenticate, login

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            messages.info(request, "Thanks for registering. You are now logged in.")
            new_user = authenticate(username=form.cleaned_data['username'],
                                    password=form.cleaned_data['password1'],
                                    )
            login(request, new_user)
            return HttpResponseRedirect("/dashboard/")
票数 117
EN

Stack Overflow用户

发布于 2015-03-11 05:45:54

对于基于类的视图,以下是适用于我的代码(最初为Django 1.7,更新为2.1)

from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.views.generic import FormView

class SignUp(FormView):
    template_name = 'signup.html'
    form_class = UserCreateForm
    success_url='/account'

    def form_valid(self, form):
        #save the new user first
        form.save()
        #get the username and password
        username = self.request.POST['username']
        password = self.request.POST['password1']
        #authenticate user then login
        user = authenticate(username=username, password=password)
        login(self.request, user)
        return HttpResponseRedirect(self.get_success_url)
票数 10
EN

Stack Overflow用户

发布于 2019-06-01 12:08:20

您可以子类化Django的UserCreationForm并覆盖它的commit=True方法,以便在执行保存操作时将它们记录下来。

forms.py

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login

class CustomUserCreationForm(UserCreationForm):
    """
    A ModelForm for creating a User and logging 
    them in after commiting a save of the form.
    """

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request = request

    class Meta(UserCreationForm.Meta):
        pass

    def save(self, commit=True):
        user = super().save(commit=commit)
        if commit:
            auth_user = authenticate(
                username=self.cleaned_data['username'], 
                password=self.cleaned_data['password1']
            )
            login(self.request, auth_user)

        return user

您只需要确保在实例化表单时传入一个请求对象。您可以通过覆盖视图的get_form_kwargs方法来实现这一点。

views.py

def get_form_kwargs(self):
    form_kwargs = super().get_form_kwargs()
    form_kwargs['request'] = self.request
    return form_kwargs

或者,确保在实例化form_class时执行CustomUserCreationForm(data=request.POST, request=self.request)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3222549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档