Django自帶有用戶驗證系統,它能夠處理User、Group、permission以及基於用戶cookie的session。這個文檔是基於Django官網文檔的介紹,以及其餘的資料整理而來。主要的內容介紹了Django的用戶驗證系統的基本工做原理,而且也會對於如何爲你的項目定製用戶驗證作出簡單介紹。django
首先,咱們須要定義permission對象,而這個對象在定義的時候是須要與對應的model綁定的。
而後,定義好的permission就能夠賦予給user或者group對象,實現permission與用戶的綁定。
最後,在view以及template中能夠經過API對於user或者group進行權限的校驗了。cookie
permission可使用多種方式進行定義:session
咱們能夠在model的Meta中對permission進行定義。
官網示例以下:app
或者能夠在獨立於model以外的位置定義。
官網示例以下:google
以上的兩個例子都是須要咱們已經具備model的狀況下才能定義permission,若是咱們尚未model的狀況下,又想要定義permission的話,應該怎麼處理呢?雖然這個需求有點奇怪
引用至GoogleGroup一個不存在的頁面:url
url_content_type = ContentType.objects.create( name='url permission', app_label='crashstats', model='unused') can_view_url = Permission.objects.create( name='can view url', content_type=url_content_type, codename='can_view_url') user = User.objects.get(username='example_user', is_superuser=False) user.user_permissions.add(can_view_url)
這樣經過綁定到一個不存在的model來實現也是支持的。實際使用中發如今定義ContentType的時候,給model賦值空字符串也是可行的,可是None則不行。spa
這樣就會獲得咱們所定義的permission對象了。並且Django會爲每一個permission賦予一個全局惟一的code,規則:<app_label>.<permission_codename>。經過這個code就能夠指定相應的permissioncode
權限的授予能夠經過user或者group來進行。
user經過user_permissions屬性設置permission,group經過permissions屬性設置permission。對象
官網示例以下:
官網示例以下:
注意:permissions除了用string指定單個權限以外,還支持list以及tuple用於多個權限。
官網示例以下:
若是在Django的settings裏面設置了django.contrib.auth.context_processors.auth,以及啓用了RequestContext的話,那Django就會默認在template中傳遞兩個變量:
{{ user }}
{{ perms }}
其中的{{ perms }}
變量就能夠實如今template使用permission,從而達到經過不一樣的permission提供不一樣的template的功能。
實際上Django在template當中對於permission的使用提供了兩個API的功能,一個是User.has_module_perms;另外一個是User.has_perm。
當你在template中使用{{ perms.foo }}
的時候就會調用User.has_module_perms方法,若是用戶具備foo這個permission的話,這個值就會爲True。
當你在template中使用{{ perms.foo.can_vote }}
的時候就會調用User.has_perm方法,若是用戶具備foo.can_vote這個permission的話,這個值就會爲True。
permission在template中的使用示例: