Python 注册后自动登录
在django 1.9中,用户注册后如何自动登录 我遵循了来自的答案,但在尝试时得到了答案 我在settings.py中添加了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
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
,因为您使用的是默认值。请在问题中包含回溯,而不是链接到图像。它可以帮助其他用户在将来找到您的问题。好的。下次我会这么做。:)顺便说一下,谢谢你的回答。