0

HttpResponse、HttpResponseRedirect、および render_to_response の違いに関する次のスタックオーバーフローの質問を既にチェックアウトし、公式の django ドキュメントを調べましたが、作成しようとしている機能を取得する最善の方法が本当にわかりません.

現在、ログイン機能を備えたindex.htmlがあります (以下のviews.pyを参照)。render_to_responseこれにより、portal/index.htmlにアクセスできます。ただし、urls.py (以下を参照) が示すように、私のブラウザーの URL バーの URL はhttp://127.0.0.1:8000/login/. これは、ページを更新するとフォームが強制的に再表示されることを意味します。

そのURLを(ログインしたら)どのように見えるようhttp://127.0.0.1:8000/にするか、またはそれが不可能な場合は、http://127.0.0.1:8000/portal/ログインしたらページをリロードするたびにブラウザーにプロンプ​​トを開くように強制するのは不器用だと思うからですもう一度フォームを送信しますか? .

Django初心者を助けてくれてありがとう!

ビュー.py

@cache_page(60 * 15)
def login_user(request):
    #inactive_image_url = ""
    #invalid_credentials_url = ""
    context_instance=RequestContext(request)
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)            
                state = "You're successfully logged in!"
                return render_to_response('ucproject/portal/index.html', 
                        {'state':state, 'username':username}, context_instance=RequestContext(request))
            else:
                #state_img = inactive_image_url
                state = "Your account is not active, please contact UC admin."
        else:
            #state_img = invalid_credentials_url
            state = "Your username and/or password were incorrect."
    return render_to_response('ucproject/index.html', 
            {'state': state,
             #'state_img': state_img,
             'username': username
            }, context_instance=RequestContext(request))

def portal(request):
    username = 'username'
    return render_to_response('ucproject/portal/index.html', 
            {'state': state,'username': username}, context_instance=RequestContext(request))

urls.py

# Login / logout.
url(r'^registration/$', 'portal.views.registration'),
url(r'^login/$', 'portal.views.login_user'),
url(r'^portal/$', 'portal.views.portal'),
url(r'^portal/index.html$', 'portal.views.portal'),
4

1 に答える 1

3

ここの HttpResponse をリダイレクトに置き換えます。

if user.is_active:
    login(request, user)            
    state = "You're successfully logged in!"
    return render_to_response('ucproject/portal/index.html', 
           {'state':state, 'username':username}, context_instance=RequestContext(request))

代わりに、urls.py で名前を使用して曖昧さをなくします。

urls.py
url(r'^portal/$', 'portal.views.portal', name='home'),
url(r'^portal/index.html$', 'portal.views.portal', name='home_index'),

次に、ビューで次のようなものを使用します。

if user.is_active:
    login(request, user)
    return redirect('home')

redirectはショートカット関数ですが、HttpResponseRedirectオブジェクトを作成して返すこともできます。通常、それを行う意味はありません。

于 2013-08-09T21:31:19.427 に答える