简体   繁体   English

使用formwizard-django创建用户后登录

[英]Login after creating a user with formwizard-django

I would like to login after the creation of users. 创建用户后,我想登录。 But i'm using formwizard and I've got an error "global name 'request' is not defined" when i try. 但是我正在使用formwizard,尝试时遇到错误“未定义全局名称'request'”。

Here is my view.py 这是我的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

So how should i do to login after the creation of users? 那么创建用户后我该如何登录?

Edit : After making the edit suggested by user777466 my views.py is now: 编辑:进行了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)

The output during and after the form are : 表单期间和之后的输出为:

[13/Nov/2013 08:39:12] "GET /gestionProfil/createNew/ HTTP/1.1" 200 4639 [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: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]“ POST / gestionProfil / createNew / HTTP / 1.1” 200 4601

[13/Nov/2013 08:39:40] "GET /captcha/image/c9adfbd5b6984ed094fdc7c4607acfb4d915d037/ HTTP/1.1" 200 4611 [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/ init .py:827: RuntimeWarning: DateTimeField received a naive datetime (2013-11-13 08:39:45.847325) while time zone support is active. /usr/local/lib/python2.7/dist-packages/django/db/models/fields/ init .py:827:RuntimeWarning:DateTimeField在时间上收到一个简单的日期时间(2013-11-13 08:39:45.847325)区域支持处于活动状态。 RuntimeWarning) 运行时警告)

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/ init .py:827: RuntimeWarning: DateTimeField received a naive datetime (2013-11-13 08:39:45.864404) while time zone support is active. /usr/local/lib/python2.7/dist-packages/django/db/models/fields/ init .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 [13 / Nov / 2013 08:39:47]“ POST / gestionProfil / createNew / HTTP / 1.1” 200 3704

Edit 2: I've remove my database and made a new syncdb, now the authentication is working. 编辑2:我已经删除了我的数据库并创建了一个新的syncdb,现在身份验证正在工作。

Your request is not passed through the process_form_data method. 您的请求未通过process_form_data方法传递。

Solution 1 - log the user in the process_form_data method: 解决方案1-在process_form_data方法中记录用户:

form_data = process_form_data(self.request, form_list)
def process_form_data(request, form_list)
  ...

Solution 2 - log the user in the done method: 解决方案2-使用完成的方法记录用户:

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

Recently, I had the authenticate() not working on a project because of the password field. 最近,由于密码字段,我使authenticate()无法在项目上工作。 In that case, make a simple : 在这种情况下,做一个简单的:

user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)

So you should have something like: 因此,您应该具有以下内容:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM