python測試開發django-rest-framework-60.使用token登錄(authentication之TokenAuthentication)


前言

現在很多接口項目在登錄的時候返回一個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 JsonResponse({"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用戶認證下篇再講


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM