1

Django アプリのビューにログイン データを渡そうとしていますが、ビューに POST データを取得できません。まず、ログイン インターフェイスを含むテンプレート。

<form method="post" action="login">
{% csrf_token %}
    Username<input type="text" name="username"><br />
    Password<input type="password" name="password"><br />
    <input type="submit" value="Login" />
</form>

次に、これを、views.py で次のように定義されているログイン ビューに渡します。ここで問題が発生します。

from django.contrib.auth import authenticate, login
def login(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    #logic with directing user to the login page again or to the access they need

ユーザー名変数に割り当てようとした行で、次のエラーが表示されます。

MultiValueDictKeyError at /minion/login
"Key 'username' not found in <Querydict: {}>"
Request Method: GET
Request URL: http://127.0.0.1:8000/minion/login
Django Version: 1.5.1

奇妙なことに、ページの Request Information セクションには、POST 情報や GET 情報がないと書かれています。A. テンプレートで POST を指定したため、リクエスト メソッドが GET であると表示される理由と、B. POST または GET データがない理由。Django / PythonでPOSTデータを使用することについて私が見逃している可能性があることを誰かが知っているか、別の情報が必要な場合. 助けてくれてありがとう。

編集:いくつかの進歩。フルパスを入力することで、最初の提案からリバースエラーを介してページをロードすることができました。この時点での私の問題の核心は、GET ではなく POST としてフォーム データをビュー関数に渡す方法を考え出すことです。

編集: アプリケーション ディレクトリにある私の urls.py ファイルは次のとおりです。

from django.conf.urls import patterns, include, url

urlpatterns = patterns('Minion.views',
    url(r'^$', 'home'),
    url(r'^login/$', 'login'),
    #some other unrelated pages are here, I haven't done anything with them yet though
)
4

4 に答える 4

0

これを試してみてください。views.pyで確実に機能します

from django.contrib.auth import authenticate, login
def login(request):
    if request.method == 'POST':
       data = request.POST
       username = data['username']
       password = data['password']
       user = authenticate(username=username, password=password)
于 2013-06-14T10:43:47.127 に答える