0

ユーザー作成後にログインしたいのですが。しかし、私は formwizard を使用しており、試してみると「グローバル名 'request' が定義されていません」というエラーが表示されます。

これが私の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)

フォーム中およびフォーム後の出力は次のとおりです。

[2013 年 11 月 13 日 08:39:12] "GET /gestionProfil/createNew/HTTP/1.1" 200 4639

[2013 年 11 月 13 日 08:39:22] "POST /gestionProfil/createNew/ HTTP/1.1" 200 5085

[2013/11/13 08:39:40] "POST /gestionProfil/createNew/HTTP/1.1" 200 4601

[2013 年 11 月 13 日 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 がナイーブな日時 (2013-11-13 08:39:45.847325) を受け取りましたゾーン サポートが有効です。ランタイム警告)

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/ init .py:827: RuntimeWarning: DateTimeField がナイーブな日時 (2013-11-13 08:39:45.864404) を受け取りましたゾーン サポートがアクティブです。ランタイム警告)

[2013 年 11 月 13 日 08:39:47] "POST /gestionProfil/createNew/ HTTP/1.1" 200 3704

編集 2: データベースを削除し、新しい syncdb を作成しました。認証が機能するようになりました。

4

1 に答える 1

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
于 2013-11-11T23:47:54.960 に答える