[Django]登陸界面以及用戶登入登出權限


前言:簡單的登陸界面展現,以及用戶登陸登出,最后用戶權限的問題

正文:

首先需要在settings.py設置ROOT_URLCONF,默認值為:

ROOT_URLCONF  = 'www.urls'#用戶請求django站點頁面首先檢查這個模塊

這里的www.urls是我的工程www下urls.py文件

urls.py文件主要設置urlpatterns參數,設置如下:

 urlpatterns= [
    url(r'^$', 'login.views.login_view', name='login_view'),#用戶登陸界面

    url(r'^admin/', include(admin.site.urls)),#后台登陸
]

這里清理以下思路,當我們訪問網頁時首先檢查ROOT_URLCONF模塊,通過觀察urls.py文件中的urlpatterns參數設置,網頁首先運行login這個APP中的views.py中的login_view函數,當用戶輸入賬戶和密碼並點擊登陸按鈕后,判斷賬戶和密碼是否正確,若錯誤,返回首頁,正確進入首頁.

views.py文件如下:

#coding:utf-8
from django.shortcuts import render,HttpResponse
from django.contrib.auth import authenticate ,logout ,login

from .forms import LoginForm

def login_view(request):
    logout(request)
    if request.method == 'POST':#判斷是否為一個POST請求
        form = LoginForm(request.POST)#綁定數據至表單
        if form.is_valid():#判斷表單數據是否合法
            uname = form.cleaned_data['username']#獲取表單中用戶名稱
            pword = form.cleaned_data['password']#獲取表單中用戶密碼
            user = authenticate(username=uname, password=pword)#調用authenticate認證用戶
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return render(request, 'home/index.html')
                    # Redirect to a success page.
            else:
                response = HttpResponse()
                response.write('<html><script type="text/javascript">alert("密碼錯誤"); window.location=""</script></html>')
                return response
                # Return an 'invalid login' error message.
    else:
        form = LoginForm()
    return render(request, 'login/index.html', {'form': form})

 上面view文件中顯示用戶登陸的過程大致分為:認證用戶--登入用戶--登出用戶三步這主要的三步 ,認證用戶使用函數authenticate,登陸用戶使用login,登出用戶使用logout

  模板格式如下:

<div class="login">
            <div id="main">
                   <form method="post">
                  {% csrf_token %}
                  {{ form.as_p }}
                  <input type="submit" value="提交" />
                  </form>    
            </div>
       </div>

最后記住必須在登陸用戶后才能使用用戶權限,模板中使用權限的方法(摘自官方):

模板中的認證數據

當你使用RequestContext時,當前登入的用戶和它們的權限在模板上下文中可以訪問。

技術細節

技術上講,這些變量只有在你使用RequestContext並啟用了'django.contrib.auth.context_processors.auth'

上下文處理器時才可以在模板上下文中訪問到。 它是默認產生的配置文件。更多信息,參見RequestContext 文檔

用戶

當渲染RequestContext模板時,當前登錄的用戶,可能是User

實例或者 AnonymousUser實例,會存儲在模板變量 {{ user }}中:
{% if user.is_authenticated %} <p>Welcome, {{ user.username }}. Thanks for logging in.</p> {% else %} <p>Welcome, new user. Please log in.</p> {% endif %} 

如果使用的不是RequestContext,則不可以訪問該模板變量:

權限

當前登錄的用戶的權限存儲在模板變量{{ perms }}

中。 這是個 django.contrib.auth.context_processors實例的封裝,他是一個對於模板友好的權限代理。

{{ perms }}

對象中,單一屬性的查找是 User.has_module_perms的代理。 如果已登錄的用戶在foo 應用中擁有任何許可,這個例子會顯示 True
{{ perms.foo }} 

二級屬性的查找是User.has_perm的代理。

如果已登錄的用戶擁有foo.can_vote的許可,這個示例會顯示True
{{ perms.foo.can_vote }} 

所以,你可以用模板的{% if %}

語句檢查權限:
{% if perms.foo %} <p>You have permission to do something in the foo app.</p> {% if perms.foo.can_vote %} <p>You can vote!</p> {% endif %} {% if perms.foo.can_drive %} <p>You can drive!</p> {% endif %} {% else %} <p>You don't have permission to do anything in the foo app.</p> {% endif %} 

還可以通過{% if in %}

語句查詢權限。 例如:
{% if 'foo' in perms %} {% if 'foo.can_vote' in perms %} <p>In lookup works, too.</p> {% endif %} {% endif %} 

  


免責聲明!

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



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