カスタムのDjango=ログインページがあります。ユーザー名またはパスワードのフィールドが空のときに例外をスローしたいのですが、どうすればよいですか?
私のview.pyログイン方法:
def user_login(request):
context = RequestContext(request)
if request.method == 'POST':
# Gather the username and password provided by the user.
# This information is obtained from the login form.
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
print("auth",str(authenticate(username=username, password=password)))
if user:
# Is the account active? It could have been disabled.
if user.is_active:
login(request, user)
return HttpResponseRedirect('/')
else:
return HttpResponse("xxx.")
else:
# Bad login details were provided. So we can't log the user in.
print ("Invalid login details: {0}, {1}".format(username, password))
return HttpResponse("Invalid login details supplied.")
else:
return render_to_response('user/profile.html', {}, context)
私はこれを試してもうまくいきませんでした:これはforms.pyです
def clean_username(self):
username = self.cleaned_data.get('username')
if not username:
raise forms.ValidationError('username does not exist.')
Djangoが提供するログインビューを使用できます。したがって、login.htmlはその例のようになります。
<form class="login" method="POST" action="/login/">
{% csrf_token %}
{{form.as_p}}
<li><input type="submit" class="logBut" value="Log in"/></li>
</form>
Urls.pyを覚えておいてください!
url(r'^login/$','Django.contrib.auth.views.login', {'template_name': '/login.html'}),
正しいアプローチは、request.POST
から変数を直接フェッチする代わりに、 forms を使用することです。 Djangoはフォームデータを検証し、フォームがテンプレートでレンダリングされるときにエラーを表示します。フォームフィールドが必要な場合、Djangoは自動的に表示されますフィールドが空の場合のエラー。このためにclean_<field_name>
メソッドを記述する必要さえありません。
Djangoにはすでに ログインビューに組み込まれています があります。最も簡単な方法は、独自に作成するのではなく、これを使用することです。それでも独自のビューを作成したい場合は、Djangoがどのように行うかを見ると便利です。