Django實戰(22):處理登錄和注銷


前一節我們實現了用戶管理,本節對用戶登錄和登出進行處理。由於我們已經引入了django.contrib.auth應用,用戶的登錄和登出處理變得非常簡單。

我們已經可以在view函數中判斷用戶是否已經登錄以及獲取用戶信息:

if request.user.is_authenticated():     #判斷用戶是否已登錄
    user = request.user;          #獲取已登錄的用戶
else:   
    user = request.user;          #非登錄用戶將返回AnonymousUser對象

 

Django的User對象提供了一系列的屬性和方法,其中password存儲的是加密后的密碼,is_staff記錄用戶是否有管理員權限,其他的屬性可以參考官方文檔。同時django.contrib.auth模塊中提供了authenticate()、login()、logout()等函數,分別實現認證、登錄、登出等功能。

Django還為我們提供了內置的處理login、logout的view函數,但是因為其提供的行為與我們這里要的不一樣,所以還需要自己實現view函數。

 

我們使用bootstrap模板設計的布局中,在菜單欄已經放入了登錄表單,如下圖:

 

上一節所述,我們希望只有登錄后的用戶才可以管理產品,所以在右上角輸入用戶名和密碼並登錄后,該處顯示用戶名和”注銷“按鈕,而頁面重定向的產品管理的界面。

。而注銷后再恢復成登錄表單。

 

需求已經明確了,現在開始實現。對於url配置,由於login和logout功能應該屬於整個project,而不是特定的app,所以在depot/urls.py中配置:

from depotapp.views import login_view,logout_view
urlpatterns = patterns('',
    ... ...
    (r'^accounts/login/$', login_view),
    (r'^accounts/logout/$', logout_view),
)

 

而我們的設計的界面中沒有獨立的登錄、注銷界面,所以view函數還是在depotapp的views.py中實現:

 

from django.contrib.auth import authenticate,login,logout

def login_view(request):    
    user = authenticate(username=request.POST['username'], password=request.POST['password'])
    if user is not None:
        login(request, user)    
        print request.user    
        return list_product(request)
    else:
        #驗證失敗,暫時不做處理
        return store_view(request)

def logout_view(request):
    logout(request)
    return store_view(request)

所有的界面都在base.html模板中,將base.html的topbar中原來登錄表單的部分,改成如下的樣子:

 

{% if request.user.is_authenticated %}
        <div class="pull-right">
            <a href=#>歡迎您:{{request.user}}</a>  
            <a class="btn danger small" href="{% url depotapp.views.logout_view %}">注銷</a>
        </div>
{% else %}
          <form action="{% url depotapp.views.login_view %}" method='post' class="pull-right">
            {% csrf_token %}
            <input name='username' class="input-small" type="text" placeholder="用戶名">
            <input name='password' class="input-small" type="password" placeholder="密碼">
            <button class="btn" type="submit">登錄</button>
          </form>
{% endif %}

 

所有的工作就完成了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM