2010-11-29 118 views
0

嘿所有 -
我完全不熟悉Django/python,並且正在通過一個類的教程,位於here。我已經掌握了大部分工作,但我遇到了麻煩。我可以註冊一個用戶,但看起來不能登錄。有關本教程的相關部分,請搜索​​We’ll need one more form, a login form:這一行,其中介紹瞭如何實現登錄表單。我做到了這一點,表單工作,我可以「登錄」,我確實在客戶端上獲得會話cookie。Django遇到問題,請求和登錄?

問題是,如果向下滾動一下,您將看到We should add a welcome message and login/logout links to our templates:,它解釋瞭如何在用戶登錄時向用戶顯示歡迎信息,或者如果用戶沒有登錄,則會顯示登錄鏈接。問題是,登錄後,我仍然得到一個登錄鏈接!

現在,教程解釋了這一點。它說我需要做兩件事情:1)將下面的代碼在我的settings.py文件

TEMPLATE_CONTEXT_PROCESSORS = [ 
    "django.core.context_processors.request" 
] 

2)創建一個名爲middleware.py這將設置request.user值。我已經做到了這一點,並重新啓動我的服務器,但我仍然有同樣的問題。 (該代碼是在教程,但我會貼在這裏也爲簡單起見):

from users.models import User 
class UserMiddleware(object): 
    def process_request(self, request): 
     user_id = request.session.get("user_id") 
     if user_id is not None: 
      request.user = User.objects.get(pk=user_id) 
     else: 
      request.user = None 

我試圖改變對第一部分的語法有點下面:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request", 
) 

哪個更好與settings.py中的其他行匹配,但這也沒有幫助。

我知道這是一個巨大的文字牆,但有人能指出我正確的方向嗎?這本身不是一項任務,只是一個稍後作業的教程,所以幫助真的很感謝!

回答

0

您是否已將新的中間件類添加到settings.py中的MIDDLEWARE_CLASSES列表中?

+0

我被告知如果視圖使用RequestContext,這不是必需的。不過,我該怎麼做才能保證安全? – Joseph 2010-11-29 10:37:51

0

在現實生活中,您將使用django.contrub.auth進行登錄/身份驗證。

它看起來沒有將request.session [「user_id」]設置爲user.pk.正如我所看到的,這是在本教程的登錄視圖中完成的。您的登錄視圖與教程中的完全相同嗎?您的登錄表單中是否有method =「post」?

+0

我的登錄視圖與本教程中的視圖相同。這裏是我的users/views.py文件:http://python.pastebin.com/qF8VTAVr,登錄表單的HTML是方法POST。 – Joseph 2010-11-29 09:53:35