2010-01-26 30 views
1

我正在嘗試關注用戶登錄的http://docs.djangoproject.com/en/1.1/topics/auth/代碼。Django身份驗證文檔中的MultiValueKeyDict錯誤

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      HttpResponseRedirect('/%s/'%username) 
     else: 
      #Logic will go here later 
      pass 
    else: 
     # Return an 'invalid login' error message. 
     pass 

我的問題是,當我嘗試使用這一新的觀點,我收到以下錯誤信息: (「預期的縮進塊」('C:\ emodel_tracking \ .. \ emodel_tracking \跟蹤\ views.py',50,4,'else:\ n'))

我看不出else語句的格式是怎麼錯的;我直接從django文檔使用代碼。任何想法「else」聲明有什麼問題?

編輯:OK,使用通固定的錯誤 - 現在我就廢話一下:在/登錄/ MultiValueDictKeyError ---快捷鍵 '用戶名' 中的QueryDict未發現:{}。思考?我不太清楚如何進行 - 我的猜測是,我需要以某種方式配合這類似於這樣一個HTML表單:

{% extends "base.html" %} 

    {% block content %} 

    {% if form.errors %} 
    <p class="error">Sorry, that's not a valid username or password</p> 
    {% endif %} 

    <form action="" method="post"> 
    <label for="username">User name:</label> 
    <input type="text" name="username" value="" id="username"> 
    <label for="password">Password:</label> 
    <input type="password" name="password" value="" id="password"> 

    <input type="submit" value="login" /> 
    <input type="hidden" name="next" value="{{ next|escape }}" /> 
    </form> 

{% endblock %} 

如果是這樣的話,我怎麼呈現出形式(如果我沒有弄錯,那麼在我請求表單所要求的信息之前,需要「返還」聲明?

+1

每次遇到新問題時都不應改變您的問題。 – 2010-01-26 22:15:01

+0

這應該是一個新問題,因爲它與前一個無關。 – 2010-01-26 22:31:50

回答

2

「其他」中沒有任何內容; 如果你不想做一件事那裏說pass。 django文檔希望你在那裏實現你自己的代碼,所以如果你沒有放置任何東西,它會將它檢測爲縮進錯誤。如果你沒有任何代碼實現你可以暗示python只是ignore其他。

else: 
    pass 
1

,而不是pass的建議,它可能是居然把東西是個好主意。

我在調試中使用簡單的錯誤,但您可能想重定向到某種錯誤頁面。無論哪種方式,這裏有一個簡單的方法來提醒用戶。

return HttpResponse('ERROR: Account Disabled.') 
5

要回答你的第二個問題:
當執行視圖,它試圖從POST數據讀取用戶名。

這意味着,您認爲應該只(通過POST用戶名和密碼數據一起IE)遞交表格後訪問或你必須改變你的觀點:

def my_view(request): 
    if request.method == "POST": 
     username = request.POST['username'] 
     password = request.POST['password'] 
     # gon on ... 
    else: 
     # just show the form 

順便說一下,最好是遵循this tutorial而不是從文檔頁面複製和粘貼代碼片段並嘗試使其工作。這些只是片段,它們不包含所有需要的代碼。
難怪代碼無法正常工作。

閱讀Django書籍,然後你可以問問題是否有問題。