0

これは私のログインビューです:

def sign_in(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    redirect('/')
                else:
                    # Return a 'disabled account' error message
                    return render_to_response('message.html', {...})
            else:
                # Return an 'invalid login' error message.
                ???

    else:
        form = LoginForm()

    return render(request, 'accounts/login.html', {
        'form': form,
        })

そして、これは私の LoginForm クラスです:

class LoginForm(forms.Form):
    username = forms.CharField(required=True, max_length=30)
    password = forms.CharField(required=True, widget=forms.PasswordInput(), max_length=128)

欠けている部分は# Return an 'invalid login' error message. ???

ログインが無効であるというエラー メッセージが表示されたフォームを再表示するにはどうすればよいですか?

4

3 に答える 3

1

交換 ???パス付き。3 行目で作成された LoginForm オブジェクトには、エラーが含まれています。テンプレートを変更してエラーを表示します。

于 2013-01-21T08:28:32.523 に答える
1

エラー メッセージを定義して、同じテンプレートをレンダリングできます。どこかに表示されるように、エラー メッセージをテンプレートに渡す必要があります。

このようなもの:

def sign_in(request):
    error = None
    if request.method == 'POST':
    ...
        else:
            # Return an 'invalid login' error message
            error = "Invalid username/password."
            #if you want to keep provided username, but clear password field
            form = LoginForm(initial={'username': request.POST.get('username')})

    ...
    return render(request, 'accounts/login.html', {
        'form': form, 'error': error
        })

適切に表示されるようにテンプレートを更新しerrorます。

于 2013-01-21T08:32:16.950 に答える
0

フォーム エラーを表示するには、 と を使用する必要が{{ form.name_of_field.errors }}あり{{ form.non_field_errors }}ます。あなたの場合、次のことができます:

    ...
    else:
        # Return an 'invalid login' error message.
        message = 'Your message'

return render(request, 'accounts/login.html', {
    'form': form, 'message': message
    })

if request.method == 'POST':次を使用して不要なものを削除することもできます。form = LoginForm(request.POST or None)

于 2013-01-21T08:29:04.420 に答える