Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 注册后自动登录_Python_Django - Fatal编程技术网

Python 注册后自动登录

Python 注册后自动登录,python,django,Python,Django,在django 1.9中,用户注册后如何自动登录 我遵循了来自的答案,但在尝试时得到了答案 我在settings.py中添加了AUTHENTICATION\u BACKENDS=('django.contrib.auth.BACKENDS.modelbend') 以下是我的视图.py: from django.shortcuts import render from django.views.generic.edit import CreateView, UpdateView, DeleteVi

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

我遵循了来自的答案,但在尝试时得到了答案

我在settings.py中添加了
AUTHENTICATION\u BACKENDS=('django.contrib.auth.BACKENDS.modelbend')

以下是我的视图.py:

from django.shortcuts import render
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from .models import UserProfile
from django.contrib.auth.models import User
from .forms import UserForm
from .forms import UserProfileForm
from django.http import HttpResponseRedirect
from django.contrib.auth import authenticate, logout, login

# Create your views here.
def RegisterView(request):

    registration_success = False

    if request.method == 'POST':
        user_form = UserForm(request.POST, prefix='uf')
        profile_form = UserProfileForm(request.POST, request.FILES, prefix='upf')

        if user_form.is_valid() and profile_form.is_valid():
            user_atr = user_form.save()
            user_atr.set_password(user_atr.password)
            user_atr.save()

            profile = profile_form.save(commit=False)
            profile.user = user_atr

            profile.avatar = request.FILES.get('avatar')

            profile.save()
            registration_success = True
            user_atr = authenticate(username=request.POST['username'],
                                    password=request.POST['password'])
            login(request, user_atr)
            return HttpResponseRedirect("/")
        else:
            print (user_form.errors, profile_form.errors)

    else:
        user_form = UserForm(prefix='uf')
        profile_form = UserProfileForm(prefix='upf')

    return render(request, 'profile/register.html', {'profile_form': profile_form, 'user_form': user_form})
和我的forms.py:

class UserForm(ModelForm):

    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        for field_name, field in self.fields.items():
            field.widget.attrs['class'] = 'field-input-element'

    confirm_password = forms.CharField(widget=forms.PasswordInput())

    class Meta:
        model = User
        fields = ('username', 'email', 'password')
        widgets = {
            'password': forms.PasswordInput(),
        }


class  UserProfileForm(ModelForm):

    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        for field_name, field in self.fields.items():
            field.widget.attrs['class'] = 'field-input-element'

    class Meta:
        model = UserProfile
        fields = ('display_name', 'avatar', 'birthday', 'usertype', 'daw', 'usergenre', 'gender')
        widgets = {
            'birthday': AdminDateWidget(),
        }

您正在为表单使用前缀,因此数据将作为
uf用户名
uf密码
发布。因此,
request.POST['username']
给出了一个
KeyError

直接从
request.POST
获取数据通常不是一个好主意。取而代之的是从表单的清理数据中获取它,并让Django处理前缀和验证

user_atr = authenticate(username=user_form.cleaned_data['username'],
                        password=user_form.cleaned_data['password'],
                        )

您正在为表单使用前缀,因此数据将作为
uf用户名
uf密码
发布。因此,
request.POST['username']
给出了一个
KeyError

直接从
request.POST
获取数据通常不是一个好主意。取而代之的是从表单的清理数据中获取它,并让Django处理前缀和验证

user_atr = authenticate(username=user_form.cleaned_data['username'],
                        password=user_form.cleaned_data['password'],
                        )

请尝试使用
request.POST.get('username')
request.POST.get('password')
。@rinti-这可以防止错误,但不会有帮助,因为它将尝试使用
user=None
password=None
进行身份验证。您不需要在设置中设置
AUTHENTICATION\u backend
,因为您使用的是默认值。请在问题中包含回溯,而不是链接到图像。它可以帮助其他用户在将来找到您的问题。好的。下次我会这么做。:)谢谢您的回答。请尝试
request.POST.get('username')
request.POST.get('password')
。@rinti-这样可以防止出现错误,但没有帮助,因为它将尝试使用
user=None
password=None
进行身份验证。您不需要在设置中设置
AUTHENTICATION\u BACKENDS
,因为您使用的是默认值。请在问题中包含回溯,而不是链接到图像。它可以帮助其他用户在将来找到您的问题。好的。下次我会这么做。:)顺便说一下,谢谢你的回答。