python測試開發django-60.token登錄(TokenAuthentication)
- 2019 年 10 月 4 日
- 筆記
前言
現在很多介面項目在登錄的時候返回一個token,登錄後的拿著這個token去訪問訪問登錄之後的請求。 本篇使用djangorestframework框架寫一個登陸的介面,登錄成功後返回token。 環境準備: python 3.6 django 2.1.2
TokenAuthentication
django rest framework許可權和認證有四種方式:
- BasicAuthentication 此身份驗證方案使用HTTP基本身份驗證,根據用戶的用戶名和密碼進行簽名。 基本身份驗證通常僅適用於測試
- TokenAuthentication 此身份驗證方案使用基於令牌的簡單HTTP身份驗證方案。 令牌認證適用於客戶端 – 伺服器設置,例如本機桌面和移動客戶端。
- SessionAuthentication 此身份驗證方案使用Django的默認會話後端進行身份驗證。 會話身份驗證適用於與您的網站在同一會話上下文中運行的AJAX客戶端。
- RemoteUserAuthentication 此身份驗證方案允許您將身份驗證委派給Web伺服器,該伺服器設置REMOTE_USER 環境變數。
本篇講TokenAuthentication這種認證方式,先安裝對應的模組
pip install djangorestframework
在setting.py中加入配置參數
INSTALLED_APPS = ( ... 'rest_framework', 'rest_framework.authtoken', )
添加REST_FRAMEWORK項,rest_framework.authentication.TokenAuthentication上面說的第三種token認證的方式。
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.TokenAuthentication', # token認證 ) }
同步資料庫,生成authtoken_token表
python manage.py migrate
執行完成後,資料庫裡面就會多一張authtoken_token表

登錄生成token案例
登錄可以直接用django自帶的User表,所以不需要重新設計表了,登錄的帳號就是User表的數據,先準備幾個登錄的帳號,比如我的登錄帳號是test,密碼是123456

views.py編輯登錄的視圖函數
# views.py from django.shortcuts import render from django.http import JsonResponse from django.shortcuts import HttpResponse from rest_framework.authtoken.models import Token from django.contrib import auth from rest_framework.views import APIView # 作者:上海-悠悠,QQ交流群:750815713 class LoginViewSet(APIView): '''登錄方法''' def post(self, request, *args, **kwargs): username = request.data.get('username') password = request.data.get('password') user = auth.authenticate(username=username, password=password) if not user: return HttpResponse({"code": 0, "msg": "用戶名或密碼不對!"}) # 刪除原有的Token old_token = Token.objects.filter(user=user) old_token.delete() # 創建新的Token token = Token.objects.create(user=user) return JsonResponse({"code": 0, "msg": "login success!", "username": user.username, "token": token.key})
urls.py設置訪問地址
# urls.py from apiapp import views from django.conf.urls import url # 作者:上海悠悠,QQ交流群:750815713 urlpatterns = [ url(r'^api/v1/login/$', views.LoginViewSet.as_view()), ]
測試登錄獲取token
接著測試登錄返回token的介面,使用post請求,請求類型Content-Type: application/json

測試結果

登錄成功後,token會寫入authtoken_token表裡面

其它的介面需要登錄之後才能訪問,也就是token用戶認證下篇再講
