0

urls.py

from django.conf.urls.defaults import patterns, include, url
import myproject.views

urlpatterns = patterns('', (r'^$', myproject.views.home), (r'^login$', apolla.views.login))

views.py

import django.http
import django.template
import django.shortcuts

def home(request):
    return django.http.HttpResponse("Welcome home!")

def login(request):
    un = request.POST.get('username')
    pa = request.POST.get('password')
    di = {'unam': un, 'pass': pa}   
    if un and pa:
        di['act'] = "/"
    else:
        di['act'] = "/login"
    return django.shortcuts.render_to_response('login.html', di, 
      context_instance=django.template.RequestContext(request))    
    # Why does this code not send me immediately to "/" with 
    # username and password filled in?

login.html

<html>
<head>
</head>
<body>
<form name="input" method="post" action="{{ act }}">
{% csrf_token %}
Username: 
<input type="text" name="username"><br>
Password: 
<input type="password" name="password"><br> 
<input id="su" type="submit" value="Submit"><br>
</form>
</body>
</html>

開発サーバーを実行し、に移動してlocalhost:8000/login入力し、送信ボタンを押すと、ログイン機能から期待したとおりに送信されませんusername。に戻るだけです。しかし、任意のフィールドに入力して2回目に送信すると、に移動します。passwordlocalhost:8000/views.pylocalhost:8000/loginlocalhost:8000

また、投稿がとフィールドからのデータをキャプチャしたかどうかを確認するために使用print unしましたが、最初から取得したので、両方とフィールドが入力された最初の送信から誘導されないのはなぜですか?print pausernamepasswordlocalhost:8000/loginusernamepassword

4

1 に答える 1

3

次の方法で、ビューにリダイレクトを追加できます。

from django.http import HttpResponseRedirect

def foo_view(request):
    # ...
    return HttpResponseRedirect('/')
于 2012-10-02T21:08:11.353 に答える