2015-07-11 67 views
0

我試圖在django中構建一個獨立於您所在頁面的登錄模塊。在Django中構建登錄模塊

我在包含頭文件的base.html模板(登錄模塊位於頭文件中)中定義了登錄模塊,所有其他頁面都擴展了此基本模板。

我的計劃是通過上下文字典傳遞錯誤,問題是我不知道如何使render()函數渲染用戶嘗試登錄的模板。

這是我的看法代碼:

def login(request): 
    context_dict = {} 
    if request.POST: 
     username = request.POST.get('login_username') 
     password = request.POST.get('login_password') 

     user = authenticate(username=username, password=password) 

     if not user: 
      context_dict['error'] = 'שם משתמש או סיסמא אין נכונים' 
     elif not user.is_active: 
      context_dict['error'] = 'חשבונך נחסם, אם הינך חושב שזאת טעות צור קשר עם מנהל בהקדם.' 
     else: 
      login(request,user) 
      redirect(request.META.get('HTTP_REFERER')) 

    render(request, ', context_dict) 
+0

如果你想回到前一個頁面,不使它。重定向將爲您的應用程序做得更好。在請求上放一個'next'參數並在登錄後檢查它。如果參數存在,則重定向到該URL。 –

+0

我已經解決了登錄成功的情況,通過簡單的使用: 重定向(request.META.get('HTTP_REFERER')) 問題是我想呈現登錄錯誤,如果它是不成功的,需要使用上下文字典來呈現模板以存儲錯誤。 我不知道要渲染哪個模板,因爲我不知道用戶來自哪個模板,因爲您可以從任何模板登錄。 – davegri

回答

0

終於想通了,關鍵是使用Django的消息框架。

這裏是誰想要實現一些類似的代碼,對任何人解釋:

簡單的URL路由在urls.py文件

url(r'^login/$', views.login, name='login'), 
url(r'^logout/$', views.logout, name='logout'), 

兩種觀點,一個用於登錄一個用於註銷

def login(request): 
    if request.POST: 
     username = request.POST.get('login_username') 
     password = request.POST.get('login_password') 

     user = authenticate(username=username, password=password) 

     if not user: 
      messages.add_message(request, messages.INFO, 'wrong username or password') 
     elif not user.is_active: 
      messages.add_message(request, messages.INFO, 'your account is disabled') 
     else: 
      django_login(request,user) 
      return redirect(request.META.get('HTTP_REFERER')) 

    return redirect(request.META.get('HTTP_REFERER')) 


def logout(request): 
    django_logout(request) 
    return redirect(request.META.get('HTTP_REFERER')) 

改性的IED進口,以避免遞歸錯誤(views.py)

from django.contrib.auth import authenticate, login as django_login, logout as django_logout 

,最後顯示的消息模板

{% if messages %} 
    {% for message in messages %} 
     <div class='login_error'> 
      {{ message }} 
     </div> 
    {% endfor %} 
{% endif %}