在Django的session中使用User對(duì)象的方法
通過(guò)session,我們可以在多次瀏覽器請(qǐng)求中保持?jǐn)?shù)據(jù), 接下來(lái)的部分就是用session來(lái)處理用戶登錄了。 當(dāng)然,不能僅憑用戶的一面之詞,我們就相信,所以我們需要認(rèn)證。
當(dāng)然了,Django 也提供了工具來(lái)處理這樣的常見(jiàn)任務(wù)(就像其他常見(jiàn)任務(wù)一樣)。 Django 用戶認(rèn)證系統(tǒng)處理用戶帳號(hào),組,權(quán)限以及基于cookie的用戶會(huì)話。 這個(gè)系統(tǒng)一般被稱為 auth/auth (認(rèn)證與授權(quán))系統(tǒng)。 這個(gè)系統(tǒng)的名稱同時(shí)也表明了用戶常見(jiàn)的兩步處理。 我們需要
- 驗(yàn)證 (認(rèn)證) 用戶是否是他所宣稱的用戶(一般通過(guò)查詢數(shù)據(jù)庫(kù)驗(yàn)證其用戶名和密碼)
- 驗(yàn)證用戶是否擁有執(zhí)行某種操作的 授權(quán) (通常會(huì)通過(guò)檢查一個(gè)權(quán)限表來(lái)確認(rèn))
- 根據(jù)這些需求,Django 認(rèn)證/授權(quán) 系統(tǒng)會(huì)包含以下的部分:
- 用戶 : 在網(wǎng)站注冊(cè)的人
- 權(quán)限 : 用于標(biāo)識(shí)用戶是否可以執(zhí)行某種操作的二進(jìn)制(yes/no)標(biāo)志
- 組 :一種可以將標(biāo)記和權(quán)限應(yīng)用于多個(gè)用戶的常用方法
- Messages : 向用戶顯示隊(duì)列式的系統(tǒng)消息的常用方法
如果你已經(jīng)用了admin工具(詳見(jiàn)第6章),就會(huì)看見(jiàn)這些工具的大部分。如果你在admin工具中編輯過(guò)用戶或組,那么實(shí)際上你已經(jīng)編輯過(guò)授權(quán)系統(tǒng)的數(shù)據(jù)庫(kù)表了。
打開(kāi)認(rèn)證支持
像session工具一樣,認(rèn)證支持也是一個(gè)Django應(yīng)用,放在 django.contrib 中,所以也需要安裝。 與session系統(tǒng)相似,它也是缺省安裝的,但如果它已經(jīng)被刪除了,通過(guò)以下步驟也能重新安裝上:
- 根據(jù)本章早前的部分確認(rèn)已經(jīng)安裝了session 框架。 需要確認(rèn)用戶使用cookie,這樣sesson 框架才能正常使用。
- 將 'django.contrib.auth' 放在你的 INSTALLED_APPS 設(shè)置中,然后運(yùn)行 manage.py syncdb以創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)庫(kù)表。
- 確認(rèn) SessionMiddleware 后面的 MIDDLEWARE_CLASSES 設(shè)置中包含 'django.contrib.auth.middleware.AuthenticationMiddleware' SessionMiddleware。
這樣安裝后,我們就可以在視圖(view)的函數(shù)中處理user了。 在視圖中存取users,主要用 request.user ;這個(gè)對(duì)象表示當(dāng)前已登錄的用戶。 如果用戶還沒(méi)登錄,這就是一個(gè)AnonymousUser對(duì)象(細(xì)節(jié)見(jiàn)下)。
你可以很容易地通過(guò) is_authenticated() 方法來(lái)判斷一個(gè)用戶是否已經(jīng)登錄了:
if request.user.is_authenticated(): # Do something for authenticated users. else: # Do something for anonymous users.
使用User對(duì)象
User 實(shí)例一般從 request.user ,或是其他下面即將要討論到的方法取得,它有很多屬性和方法。 AnonymousUser 對(duì)象模擬了 部分 的接口,但不是全部,在把它當(dāng)成真正的user對(duì)象 使用前,你得檢查一下 user.is_authenticated() 表14-3和14-4分別列出了`` User`` 對(duì)象中的屬性(fields)和方法。
System Message: ERROR/3 (<string>, line 735)
Error parsing content block for the “table” directive: exactly one table expected.
.. table:: 表 ``User`` 對(duì)象方法
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|方法 |描述 |
+=============================================================================================+======================================================================================================================================================+
|``is_authenticated()`` |對(duì)于真實(shí)的User對(duì)象,總是返回\ `` True`` 。 |
| |這是一個(gè)分辨用戶是否已被鑒證的方法。 它并不意味著任何權(quán)限,也不檢查用戶是否仍是活動(dòng)的。 它僅說(shuō)明此用戶已被成功鑒證。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``is_anonymous()`` |對(duì)于\ `` AnonymousUser`` 對(duì)象返回\ `` True`` (對(duì)于真實(shí)的\ `` User`` 對(duì)象返回\ `` False`` )。 |
| |總的來(lái)說(shuō),比起這個(gè)方法,你應(yīng)該傾向于使用\ `` is_authenticated()`` 方法。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``get_full_name()`` |返回\ `` first_name`` 加上\ `` last_name`` ,中間插入一個(gè)空格。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``set_password(passwd)`` |設(shè)定用戶密碼為指定字符串(自動(dòng)處理成哈希串)。 實(shí)際上沒(méi)有保存\ ``User``\對(duì)象。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|check_password(passwd) |如果指定的字符串與用戶密碼匹配則返回\ ``True``\。 比較時(shí)會(huì)使用密碼哈希表。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``get_group_permissions()`` |返回一個(gè)用戶通過(guò)其所屬組獲得的權(quán)限字符串列表。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``get_all_permissions()`` |返回一個(gè)用戶通過(guò)其所屬組以及自身權(quán)限所獲得的權(quán)限字符串列表。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``has_perm(perm)`` |如果用戶有指定的權(quán)限,則返回\ `` True`` ,此時(shí)\ `` perm`` 的格式是\ `` "package.codename"`` 。如果用戶已不活動(dòng),此方法總是返回\ `` False`` 。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|has_perms(perm_list) |如果用戶擁有\(zhòng) * 全部* 的指定權(quán)限,則返回\ `` True`` 。 如果用戶是不活動(dòng)的,這個(gè)方法總是返回\ `` False`` 。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``has_module_perms(app_label)`` |如果用戶擁有給定的\ `` app_label`` 中的任何權(quán)限,則返回\ `` True`` 。如果用戶已不活動(dòng),這個(gè)方法總是返回\ `` False`` 。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|get_and_delete_messages() |返回一個(gè)用戶隊(duì)列中的\ `` Message`` 對(duì)象列表,并從隊(duì)列中將這些消息刪除。 |
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
|``email_user(subj, msg)`` |向用戶發(fā)送一封電子郵件。 這封電子郵件是從\ `` DEFAULT_FROM_EMAIL`` 設(shè)置的地址發(fā)送的。 你還可以傳送一個(gè)第三參數(shù):\ `` from_email`` ,以覆蓋電郵中的發(fā)送地址。|
+---------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
最后,`` User`` 對(duì)象有兩個(gè)many-to-many屬性。 `` groups`` 和`` permissions`` 。正如其他的many-to-many屬性使用的方法一樣,`` User`` 對(duì)象可以獲得它們相關(guān)的對(duì)象:
# Set a user's groups: myuser.groups = group_list # Add a user to some groups: myuser.groups.add(group1, group2,...) # Remove a user from some groups: myuser.groups.remove(group1, group2,...) # Remove a user from all groups: myuser.groups.clear() # Permissions work the same way myuser.permissions = permission_list myuser.permissions.add(permission1, permission2, ...) myuser.permissions.remove(permission1, permission2, ...) myuser.permissions.clear()
相關(guān)文章
Python 實(shí)現(xiàn)還原已撤回的微信消息
這篇文章主要介紹了Python 神操作,還原已撤回的微信消息功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06pyqt5實(shí)現(xiàn)繪制ui,列表窗口,滾動(dòng)窗口顯示圖片的方法
今天小編就為大家分享一篇pyqt5實(shí)現(xiàn)繪制ui,列表窗口,滾動(dòng)窗口顯示圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06python使用tkinter打造三維繪圖系統(tǒng)的示例代碼
Python?的?tkinter?模塊是一個(gè)常用的?GUI(圖形用戶界面)工具包,它能夠讓你創(chuàng)建窗口應(yīng)用程序,你可以使用它來(lái)構(gòu)建用戶友好的界面,包括按鈕、標(biāo)簽、文本框、列表框等各種控件,本文講給大家介紹如何使用tkinter打造三維繪圖系統(tǒng),需要的朋友可以參考下2023-08-08OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
這篇文章主要介紹了OpenCV2.3.1+Python2.7.3+Numpy等的配置解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01詳解Python字符串對(duì)象的實(shí)現(xiàn)
本文介紹了 python 內(nèi)部是如何管理字符串對(duì)象,以及字符串查找操作是如何實(shí)現(xiàn)的,感興趣的小伙伴們可以參考一下2015-12-12python爬蟲(chóng)入門(mén)教程--利用requests構(gòu)建知乎API(三)
這篇文章主要給大家介紹了關(guān)于python爬蟲(chóng)入門(mén)之利用requests構(gòu)建知乎API的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05