前言:簡單的登陸界面展現,以及用戶登陸登出,最后用戶權限的問題
正文:
首先需要在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模板時,當前登錄的用戶,可能是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 %}
