我想在创建用户后登录。但是我使用了formwizard,我发现了一个错误"全球名称'请求'没有定义"我试试的时候。
这是我的view.py
class ProfilWizard(SessionWizardView):
template_name = "gestionProfil/profil-step1.html"
def done(self, form_list, **kwargs):
form_data = process_form_data(form_list)
return render_to_response('gestionProfil/profil.html', {'form_data': form_data})
def process_form_data(form_list):
form_data = [form.cleaned_data for form in form_list]
username = form_data[0]['username']
password = form_data[0]['password']
email = form_data[0]['email']
user = User.objects.create_user(username, email, password)
user.first_name = form_data[1]['firstName']
user.last_name = form_data[1]['lastName']
user.save()
user = authenticate(username = username, password = password)
if user:
login(request, user)
return form_data
那么在创建用户后我该如何登录呢?
编辑: 在进行user777466建议的编辑后,我的views.py现在是:
class ProfilWizard(SessionWizardView):
template_name = "gestionProfil/profil-step1.html"
def done(self, form_list, **kwargs):
(form_data,user) = process_form_data(form_list)
user.backend = 'django.contrib.auth.backends.ModelBackend'
if user:
login(self.request, user)
#return HttpResponse(form_data[0]['password'])
return render_to_response('gestionProfil/profil.html', {'form_data': form_data})
def process_form_data(form_list):
form_data = [form.cleaned_data for form in form_list]
username = form_data[0]['username']
password = form_data[0]['password']
email = form_data[0]['email']
user = User.objects.create_user(username, email, password)
user.first_name = form_data[1]['firstName']
user.last_name = form_data[1]['lastName']
user.save()
return (form_data,user)
表单期间和之后的输出是:
[13 / Nov / 2013 08:39:12]" GET / gestionProfil / createNew / HTTP / 1.1" 200 4639
[13 / Nov / 2013 08:39:22]" POST / gestionProfil / createNew / HTTP / 1.1" 200 5085
[13 / Nov / 2013 08:39:40]" POST / gestionProfil / createNew / HTTP / 1.1" 200 4601
[13 / Nov / 2013 08:39:40]" GET / captcha / image / c9adfbd5b6984ed094fdc7c4607acfb4d915d037 / HTTP / 1.1" 200 4611
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/的初始化的.py:827: RuntimeWarning:DateTimeField收到一个天真的日期时间(2013-11-13 08:39:45.847325)虽然时区支持是活跃的。 RuntimeWarning)
/usr/local/lib/python2.7/dist-packages/django/db/models/fields/的初始化的.py:827: RuntimeWarning:DateTimeField收到一个天真的日期时间(2013-11-13 08:39:45.864404)虽然时区支持有效。 RuntimeWarning)
[13 / Nov / 2013 08:39:47]" POST / gestionProfil / createNew / HTTP / 1.1" 200 3704
编辑2: 我删除了我的数据库并创建了一个新的syncdb,现在身份验证正在运行。
答案 0 :(得分:0)
您的请求未通过process_form_data方法传递。
解决方案1 - 在process_form_data方法中记录用户:
form_data = process_form_data(self.request, form_list)
def process_form_data(request, form_list)
...
解决方案2 - 使用done方法记录用户:
class ProfilWizard(SessionWizardView):
template_name = "gestionProfil/profil-step1.html"
def done(self, form_list, **kwargs):
form_data = process_form_data(form_list)
user = authenticate(username = form_data[0]['username'], password = form_data[0]['password'])
if user:
login(self.request, user)
return render_to_response('gestionProfil/profil.html', {'form_data': form_data})
def process_form_data(form_list):
form_data = [form.cleaned_data for form in form_list]
username = form_data[0]['username']
password = form_data[0]['password']
email = form_data[0]['email']
user = User.objects.create_user(username, email, password)
user.first_name = form_data[1]['firstName']
user.last_name = form_data[1]['lastName']
user.save()
return form_data
最近,由于密码字段,我让authenticate()无法处理项目。在这种情况下,做一个简单的:
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
所以你应该有类似的东西:
class ProfilWizard(SessionWizardView):
template_name = "gestionProfil/profil-step1.html"
def done(self, form_list, **kwargs):
form_data = process_form_data(self.request, form_list)
return render_to_response('gestionProfil/profil.html', {'form_data': form_data})
def process_form_data(self, request, form_list):
form_data = [form.cleaned_data for form in form_list]
username = form_data[0]['username']
password = form_data[0]['password']
email = form_data[0]['email']
user = User.objects.create_user(username, email, password)
user.first_name = form_data[1]['firstName']
user.last_name = form_data[1]['lastName']
user.save()
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
return form_data