3.3 修改許可權類
四、新增登入路由
五、新建超級使用者
六、jwt
七、修改介面預設返回值
進入虛擬環境,新建乙個名為『users』的子應用,並在settings.py中註冊。
django為我們提供了使用者模組,我們可以直接使用,但是如果有需要新增的字段,我們可以繼承django中提供的,並在此基礎上新增修改。
自己定義後還需要在全域性配置檔案中指定一下。auth_user_model的值為子應用名.model類名。from django.contrib.auth.models import abstractuser
class
users
(abstractuser)
: mobile = models.charfield(max_length=
11)
當前我們django提供的模型夠用,暫時不需要做以上的重寫。auth_user_model =
'users.users'
在django中,只要繼承了apiview就有了認證和授權的功能。
閱讀原始碼,看到django提供了session認證。我們可以重寫default_authentication_classes來修改認證方式。
上面是在全域性指定認證類,當然我們也可以在類檢視中指定。(一般不在類檢視中指定)rest_framework =
django預設drf框架使用的許可權類為allowany,具備所有許可權,我們也可以修改許可權。from rest_framework import authentication
class
projectviewset
(viewsets.modelviewset)
: authentication_classes =
[authentication.sessionauthentication, authentication.basicauthentication]
drf中的許可權:
在全域性修改許可權(一般不這樣修改)
一般來說我們會在類檢視中指定許可權,類檢視中許可權的優先順序最高。需要設定許可權的指定,不需要許可權就不用指定。rest_framework =
這樣,就需要具備許可權才能請求介面。from rest_framework import permissions
class
projectviewset
(viewsets.modelviewset)
: permission_classes =
[permissions.isauthenticated]
但是我們沒有登入的入口,我們可以在全域性路由中指定drf提供的登入路由。
此時,訪問urlpatterns =[.
..path(
'api/'
, include(
'rest_framework.urls'))
,]
就可以進行登入了。
但是我們沒有使用者,我們可以通過命令列來新建超級使用者。
進入虛擬環境,輸入python manage.py createsuperuser
,根據提示依次輸入使用者名稱、郵件位址、密碼即可。
此時我們資料庫的auth_user表中就多了一條使用者資料。
我們專案中使用jwt來做使用者認證。
在虛擬環境中使用命令pip install -i djangorestframework-jwt
安裝jwt。
在settings.py檔案中進行kwt配置
在users子應用中新增urls.py檔案。rest_framework =
obtain_jwt_token是django提供的路由
在全域性路由中新增路由指向子路由。from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns =
[ path(
'login/'
, obtain_jwt_token)
]
此時我們通過api文件請求這個介面,就能夠返回token了。urlpatterns =[.
..path(
'users/'
, include(
'users.urls'))
,]
當使用postman進行介面測試後,我們想要獲得許可權,需要在headers增加value為authorization
,值為jwt token值
,就擁有許可權了。
此時,我們的value就需要輸入bears token值
。(此處我們暫時不做修改)
在全域性配置檔案settings.py中修改。
但是當前只返回了token,實際上我們還需要username和userid,我們需要把這兩個欄位也一併返回。jwt_auth =
追蹤原始碼發現,返回值都有什麼,是jwt_response_payload_handler方法決定的,我們可以重寫這個方法。在utils資料夾中新增乙個檔案handle_jwt_response.py。
這是django並不認識我們寫的這個方法,我們需要在全域性配置檔案中重新指定payload_handler為我們自己寫的方法。值為我們自己寫的方法的引用。def
jwt_response_payload_handler
(token, user=
none
, request=
none):
return
這樣django就會執行我們自己寫的這個方法。我們就返回了需要的值。完美!jwt_auth =
測試「使用者登入」功能
如何測試 使用者登入 功能?我認為可以從功能性和非功能性兩個維度去思考。關於功能測試,首先可能會根據 使用者登入 功能的需求描述,結合等價類劃分和邊界值分析方法來設計測試用例。包括 輸入已註冊的使用者名稱和正確的密碼,驗證是否登入成功 輸入已註冊的使用者名稱和不正確的密碼,驗證是否登入失敗,並且提示...
Delphi 開發微信公眾平台 (二) 使用者管理
一 使用者標籤管理 1 建立標籤 建立標籤 2 獲取標籤 3 刪除標籤 刪除標籤 當某個標籤下的粉絲超過10w時,後台不可直接刪除標籤。此時,開發者可以對該標籤下的openid列表 先進行取消標籤的操作,直到粉絲數不超過10w後,才可直接刪除該標籤。4 編輯標籤 編輯標籤 二 設定使用者備註名 設定...
實戰 5 9 使用者功能所有模組測試
之前把各個使用者功能的開發全部放到一篇部落格中了,這裡就直接跳到5 9了哈 這裡會使用之前介紹的chrome外掛程式restlet client來模擬訪問,確實非常好用,像我這種前端不太會寫的就暫時不用費心了。之前寫配置檔案的時候,很多檔案目錄寫得是以後linux雲主機上的位置,現在要先在本地除錯一...