web-dev-qa-db-ja.com

Django=カスタムログインページ

カスタムの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.')
10
chazefate

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'}),
11
p3y4m

正しいアプローチは、request.POSTから変数を直接フェッチする代わりに、 forms を使用することです。 Djangoはフォームデータを検証し、フォームがテンプレートでレンダリングされるときにエラーを表示します。フォームフィールドが必要な場合、Djangoは自動的に表示されますフィールドが空の場合のエラー。このためにclean_<field_name>メソッドを記述する必要さえありません。

Djangoにはすでに ログインビューに組み込まれています があります。最も簡単な方法は、独自に作成するのではなく、これを使用することです。それでも独自のビューを作成したい場合は、Djangoがどのように行うかを見ると便利です。

5
Alasdair