在django1.9中,如何在用户注册后自动登录?你知道吗
我遵循this question的答案,但在尝试时得到了this error。你知道吗
我将AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
添加到设置.py你知道吗
这是我的视图.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})
还有我的表单.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-username
和uf-password
发布。因此request.POST['username']
给出了KeyError
。你知道吗无论如何,直接从
request.POST
获取数据通常不是一个好主意。取而代之的是从表单的清理数据中获取它,让Django负责前缀和验证。你知道吗相关问题 更多 >
编程相关推荐