我有一个问题,我成功注册用户 - 但是,我希望用户在注册时登录。这是代表我的注册视图的代码。有关用户未自动登录的原因的任何想法?
注意:
在settings.py中我有:
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
谢谢!
def register(request):
user_creation_form = UserCreationForm(request.POST or None)
if request.method == 'POST' and user_creation_form.is_valid():
u_name = user_creation_form.cleaned_data.get('username')
u_pass = user_creation_form.cleaned_data.get('password2')
user_creation_form.save()
print u_name # Prints correct username
print u_pass # Prints correct password
user = authenticate(username=u_name,
password=u_pass)
print 'User: ', user # Prints correct user
login(request, user) # Seems to do nothing
return HttpResponseRedirect('/book/') # User is not logged in on this page
c = RequestContext(request, {'form': user_creation_form})
return render_to_response('register.html', c)
答案 0 :(得分:3)
啊!我想到了。如果有人遇到这个问题,如果你手动调用它,请从django.contrib.auth导入登录 - 我正在导入视图。注释掉的代码代表了我的情况的糟糕导入。
# from django.contrib.auth.views import login
from django.contrib.auth import authenticate, logout, login
答案 1 :(得分:3)
我是这样做的:
u.backend = "django.contrib.auth.backends.ModelBackend"
login(request, u)
答案 2 :(得分:1)
基于类的视图这里是为我工作的代码(django 1.7)
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
from django.views.generic import FormView
class SignUp(FormView):
template_name = 'signup.html'
form_class = UserCreationForm
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 super(SignUp, self).form_valid(form)