2012-06-20 81 views
0

我有一個爲網址'site/main /'定義的視圖。我希望能夠將(未經身份驗證的)用戶重定向到默認的「/ admin /」頁面進行登錄,然後在成功登錄後重定向到「/ main /」頁面。我遵循了django文檔,但是我一定錯過了一些東西,因爲我無法得到它的工作。 我的看法是這樣的:重定向到管理員用於登錄

def main(request): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect('admin/?next=%s' % request.path) 
    else: 

我得到一個錯誤:

找不到網頁(404)
請求方法:GET
請求URL:HTTP://網站名稱:8080/main/admin /?next =/main/

任何幫助,非常感謝!

+0

感謝@ daniel-roseman的回答。遵循指示需要做一點小改變。 views.login。我遇到了與NoReverseMatch while rendering相同的錯誤,它有解決方案。 – Scottymac

+0

爲了解決您的問題,如果您也說明進口情況,則會更容易。在這裏:從django.http導入HttpResponseRedirect – Timo

回答

5

你錯過了在URL初始//admin/?next=...

然而,這仍然無法工作,因爲admin網址不知道該next參數什麼。這隻適用於實際的登錄視圖。使用您的代碼,用戶將登錄到管理員,但不會被重定向回您的頁面。

您應該創建一個登錄模板並將其連接到內置的登錄視圖。然後,而不是在視圖中檢查is_authenticated,您應該只使用login_required修飾器。

@login_required 
def main(request): 
    ... 
+0

正是我在將'/'添加到'/ admin /'後所經歷的。你失去我的部分是「你應該建立一個登錄模板,並將其連接到內置的登錄視圖。」我不太清楚如何連接它...並構建登錄模板...我對django非常感興趣(如果還不清楚:-)) – Scottymac

+0

這裏詳細解釋:https:/ /docs.djangoproject.com/en/1.4/topics/auth/#django.contrib.auth.views.login –

+0

我會給這個去...非常感謝丹尼爾! – Scottymac

2

您的request.path不應該是/main/。嘗試沒有第一個。

+0

謝謝!....將HttpResponseRedirect('admin /?next =%s)更改爲:HttpResponseRedirect('/ admin /?next =%s)實際上確實將用戶重定向到登錄屏幕(這太棒了!)....但是「next = main」似乎沒有被尊重......一旦登錄用戶仍然在管理頁面...任何想法? – Scottymac

1
  1. urls.py:

        url('^', include('django.contrib.auth.urls')), 
    
  2. 登記/ html的login

<h3>Login foo</h3> 
 
    <form method="post" action=""> 
 
    {% csrf_token %} 
 
    {{form.as_p}} 
 
    <input type="submit" value="Login"> 
 
    </form>

  • views.py

    DEF only_for_users(請求): 如果不是request.user.is_authenticated(): 返回HttpResponseRedirect('/登錄/下一=%S '%Request的)

    //取了一些非常有趣的數據

    ENV =(django.get_version(),settings.BASE_DIR,內容sys.version) envMod = collections.OrderedDict(排序(sys.modules中.items())) return render(request,'env.html',{'env':env,'env Mod':envMod})

  • 它適用於Django 1.6並使用內置登錄(請參閱urls.py)和模板。所以你不需要建立一個視圖函數。

    關於urls的信息

    相關問題