2016-09-21 7 views
1

は、私は、DjangoのUserモデルから作成されたログインフォームを持って存在している場合:Djangoのログインフォームは、()ユーザ名はすでに

reg = LoginForm(request.POST or None) 
    if reg.is_valid(): 
     return HttpResponse('Success: valid form') 
    else: 
     return HttpResponse('Error: invalid form') 

ここでユーザー名でログインしようとするとeは登録されていません成功:有効な書式ですが、既に存在する ユーザ名の場合はと表示されます。エラー:無効な書式です。

私は、コマンドラインでこれをやってみましたし、下記の(私が最初YAX、登録されたユーザー名とそれを試してみました)私が得るものです:

In [2]: data = {'username':'yax', 'password':'wrong_password'} 
In [3]: form = LoginForm(data) 

In [4]: form.is_valid() 
Out[5]: False 
In [6]: form.errors 
Out[7]: {'username': [u'A user with that username already exists.']} 

In [8]: data = {'username':'wrong_name', 'password':'wrong_password'} 
In [9]: form = LoginForm(data) 

In [10]: form.is_valid() 
Out[11]: True 
In [12]: form.errors 
Out[13]: {} 

は、私は、なぜ私が知ることができ喜んでいるだろうこのエラーが発生し、どのように解決するのですか。

+0

私たちにあなたのエラーを見せてください。プリントアウト 'print(req.errors)' – sebb

答えて

1

ログインフォームはModelFormであってはなりません。これはモデルインスタンスを作成または編集するためのものです。この場合、instanceパラメータを指定しないため、Djangoは新しいユーザを作成することを前提としています。

標準のフォームを使用して、ユーザー名とパスワードのフィールドを明示的に定義してください。

また、django.contrib.auth.formsで提供されているAuthenticationFormを使用して、認証/ログインプロセス全体を処理します。

+0

'request.method == 'のとき' loginForm = AuthenticationForm() 'と' reg = AuthenticationForm(request.POST or None)私はまだ同じエラーが発生します。 – Yax

+0

あなたはまだ、「そのユーザー名を持つユーザーがAuthenticationFormからすでに存在していますか? –

+0

私はそのエラーを取得していません。私は 'HttpResponse( 'reg.errors')'を返すときに空のエラー(エラーなし)を取得します。しかし、私も 'return HttpResponse( 'request.POST')'を試みましたが、私はdictキー、 'usernamecsrfmiddlewaretokenpasswordregister'しか見ず、データは一切ありません。私のフォームは 'def index(request):#code'というビューにサブミットします。 – Yax

関連する問題