-1

私はこの小さな問題で立ち往生しています。ユーザーがログインする必要があるページがあります。ログイン後、すべて問題ありません。ただし、ユーザーがログインした後、アドレスバーに。を押すとenter、このエラーKey 'username' not found in <QueryDict: {}>が表示され、ページにエラーが表示されます。
これはログインするための私のコードです:

if request.path == '/cms/':
    request.session['username'] = request.POST['username']
    request.session['password'] = request.POST['password']
    #check for login
    if User.objects.exists():
        u=User.objects.get(id=1)
        if u.username==request.session['username'] and u.password==request.session['password']:
            #do some stuff here, cos i am logged in

今、私がページをリロードすると、それは問題ありませんが、そうではenterありません。POSTデータをセッションに保存する必要がありますか?ここで実際に何が起こっているのですか?

どうもありがとう

4

1 に答える 1

2

何がrequest.POST含まれていますか?ユーザー名は含まれません。何が含まれているかを調べるには、開発サーバーに表示される request.POST を出力するか、値をどこかに記録するか、デバッガーに入って次を使用して調べることができますimport pdb; pdb.set_trace()

Python辞書にはget、この場合のメソッドがあります

request.POST.get('username')

キーが見つからない場合は、None代わりにデフォルトで返されますKeyError

ビューへの投稿リクエストを行っていますか?

<form method="post" action="/yoururlhere/">
  <input type="text" name="username" />
  <input type="text" name="password" />
  <input type="submit" value="submit" />
</form>

上記のフォームは、usernameおよびpasswordフィールドを投稿します。https://docs.djangoproject.com/en/dev/topics/auth/を全体的に読んで、ユーザー管理に組み込まれた django の使用方法を学ぶことが本当に重要だと思います。Django は User オブジェクト (使用しているように見えます) を提供し、認証を管理するために必要なすべての機能を提供します。

次の理由で重要です。

  1. 一度習得すれば、手動で行うよりも簡単です
  2. 簡単であるため、認証を自分で管理するよりも高速になる可能性が高くなります。
  3. 手動で行うよりもエラーが発生しにくくなります。DJango のソース コードには多くの人が注目し、多くのテストが行​​われています。サイトの安全のために組み込みツールを使用してください。
于 2013-02-19T21:43:41.507 に答える