欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

DRF使用simple JWT身份驗證的實現

 更新時間:2021年01月14日 14:35:20   作者:一切如來心秘密  
這篇文章主要介紹了DRF使用simple JWT身份驗證,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

在Django的前后端分離項目中DRF(Django Restframe Work)框架無疑是首選,關于token驗證一般使用的是JWT,但是JWT只支持到Django1.x的版本。

官方推薦Django2.x之后的版本使用simple JWT,官方文檔。

登錄返回token和refresh

user 模型類:

我user模型類繼承的是django.contrib.auth.models.AbstractUser,這樣可以使用Django自帶的認證。

如果繼承該類,我們就必須在settings中配置 AUTH_USER_MODEL = "users.UserProfile"

from datetime import datetime

from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.

class UserProfile(AbstractUser):
  """
  用戶
  """
  name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名")
  birthday = models.DateField(null=True, blank=True, verbose_name="出生年月")
  gender = models.CharField(max_length=6, choices=(("male", u"男"), ("female", "女")), default="female", verbose_name="性別")
  mobile = models.CharField(null=True, blank=True, max_length=11, verbose_name="電話")
  email = models.CharField(max_length=100, null=True, blank=True, verbose_name="郵箱")

  class Meta:
    verbose_name = "用戶"
    verbose_name_plural = "用戶"

  def __str__(self):
    return self.username

序列化文件:

注意這里使用的User是Django管理的user模型類,要從django.contrib.auth.get_user_model實例化獲取。

users模塊的serializers.py文件中寫如下序列化類繼承自rest_framework_simplejwt.serializers.TokenObtainPairSerializer

在這里插入圖片描述

from django.contrib.auth import get_user_model
User = get_user_model()

class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
  @classmethod
  def get_token(cls, user):
    token = super().get_token(user)
    token['name'] = user.username
    return token

  def validate(self, attrs):
    """
    登錄返回token和refresh
    :param attrs:
    :return:
    """
    data = super().validate(attrs)
    data['token'] = str(data["access"])
    return data

根據官方文檔的說明,get_token方法之所以設置token['name']是因為程序可能運行在集群上,這里不寫也可以。

編寫視圖類

from users.serializers import MyTokenObtainPairSerializer

class MyTokenObtainPairView(TokenObtainPairView):
  serializer_class = MyTokenObtainPairSerializer

編寫url:

其中api/token/api/token/refresh/兩個URL是simple JWT自帶的token方法:

  • api/token/用于獲取token
  • api/token/refresh/用于刷新token
from django.conf.urls import url
from django.urls import include, path

from rest_framework_simplejwt.views import (
  TokenObtainPairView,
  TokenRefreshView,
)

urlpatterns = [
  # simple jwt 認證接口
  path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
  path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
  path('login/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
]

settings配置SIMPLE_JWT:

這是對token的一些自定義設置包括獲取的token和refresh的生命周期等配置,通過查看rest_framework_simplejwt的源碼可以發(fā)現有很多自定義配置,感興趣的小伙伴可以通過查看官方文檔了解更多,這里我只配置了獲取的token的生命周期。

啟動程序訪問:

在這里插入圖片描述

在這里插入圖片描述

可以發(fā)現返回了三個值:

  • refresh:是刷新token用的,當前端token過期需要刷新token的時候就可以訪問前邊說的api/token/refreshurl,參數就是refresh的值。
  • access:這個就是token但是框架里叫做access。
  • token:這個是在序列化文件中給access新命名了一個值,方便前端獲?。?/li>
def validate(self, attrs):
  """
  登錄返回token和refresh
  :param attrs:
  :return:
  """
  data = super().validate(attrs)
  data['token'] = str(data["access"])
  return data

注冊返回token

視圖類:

  • 在視圖類中導入from rest_framework_simplejwt.tokens import RefreshToken
  • 重寫create方法,需要通過前邊導入的RefreshToken來獲取token返回給前端。
from django.contrib.auth import get_user_model
from django.db.models import Q
from rest_framework.response import Response
from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.mixins import CreateModelMixin
from rest_framework import viewsets
from rest_framework import status

from users.serializers import (
  UserRegSerializer
)
from .models import VerifyCode

User = get_user_model()


class UserViewSet(CreateModelMixin, viewsets.GenericViewSet):
  """
  用戶
  """
  serializer_class = UserRegSerializer
  queryset = User.objects.all()

  def create(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    user = self.perform_create(serializer)

    ret_dict = serializer.data
    refresh = RefreshToken.for_user(user)
    access_token = str(refresh.access_token)
    ret_dict["token"] = access_token

    headers = self.get_success_headers(serializer.data)
    return Response(ret_dict, status=status.HTTP_201_CREATED, headers=headers)

  def perform_create(self, serializer):
    return serializer.save()

到此這篇關于DRF使用simple JWT身份驗證的實現的文章就介紹到這了,更多相關DRF使用simple JWT身份驗證內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python使用正則匹配實現抓圖代碼分享

    Python使用正則匹配實現抓圖代碼分享

    本文給大家分享的是個人的第一個作品,使用Python正則匹配實現抓圖代碼,非常的簡單實用,推薦給大家,小伙伴們可以自由擴展下。
    2015-04-04
  • 用Python的Tornado框架結合memcached頁面改善博客性能

    用Python的Tornado框架結合memcached頁面改善博客性能

    這篇文章主要介紹了用Python的Tornado框架結合memcached頁面改善vLog性能,主要使用到了緩存來提升性能,需要的朋友可以參考下
    2015-04-04
  • Python局部函數及用法詳解(含nonlocal關鍵字)

    Python局部函數及用法詳解(含nonlocal關鍵字)

    局部函數有哪些特征,在使用時需要注意什么呢?接下來就給讀者詳細介紹?Python?局部函數的用法,對Python局部函數相關知識感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • python繪制評估優(yōu)化算法性能的測試函數

    python繪制評估優(yōu)化算法性能的測試函數

    這篇文章主要為大家詳細介紹了python繪制評估優(yōu)化算法性能的測試函數,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python遞歸計算N!的方法

    python遞歸計算N!的方法

    這篇文章主要介紹了python遞歸計算N!的方法,涉及Python遞歸計算階乘的技巧,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • Python多線程編程threading模塊使用最佳實踐及常見問題解析

    Python多線程編程threading模塊使用最佳實踐及常見問題解析

    這篇文章主要為大家介紹了Python多線程編程threading模塊使用最佳實踐及常見問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python進階之如何快速將變量插入有序數組

    Python進階之如何快速將變量插入有序數組

    在我們學習python的過程中,學習序列是一門必修課。本文我們就來一起看一看Python是如何快速將變量插入有序數組的,感興趣的可以了解一下
    2023-04-04
  • Python利用Rows快速操作csv文件

    Python利用Rows快速操作csv文件

    Rows?是一個專門用于操作表格的第三方Python模塊。只要通過?Rows?讀取?csv?文件,她就能生成可以被計算的?Python?對象。本文將通過示例為大家詳細講講Python如何利用Rows快速操作csv文件,需要的可以參考一下
    2022-09-09
  • 詳解Python中的List 2

    詳解Python中的List 2

    這篇文章主要為大家介紹了Python中的List,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Python中random模塊用法實例分析

    Python中random模塊用法實例分析

    這篇文章主要介紹了Python中random模塊用法,實例分析了Python中random模塊的使用技巧及字符串操作相關方法,需要的朋友可以參考下
    2015-05-05

最新評論