最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django?REST?Framework?(DRF)?項(xiàng)目中實(shí)現(xiàn)JWT的示例代碼

 更新時(shí)間:2025年02月07日 10:22:43   作者:春天的菠菜  
本文主要介紹了Django?REST?Framework?(DRF)?項(xiàng)目中實(shí)現(xiàn)JWT的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言:JSON Web Tokens (JWT) 是一種開(kāi)放標(biāo)準(zhǔn) (RFC 7519),用于在各方之間安全地傳輸信息。在現(xiàn)代 Web 應(yīng)用中,JWT 認(rèn)證是一種常見(jiàn)的身份驗(yàn)證機(jī)制,它提供了無(wú)狀態(tài)、輕量級(jí)的身份驗(yàn)證方式。本文將詳細(xì)介紹如何在 Django REST Framework (DRF) 項(xiàng)目中實(shí)現(xiàn) JWT 認(rèn)證,并配置 token 黑名單以增強(qiáng)安全性。

1、安裝依賴(lài)

需要安裝 djangorestframework 和 djangorestframework-simplejwt 包。你可以使用 pip 來(lái)安裝它們

pip install djangorestframework
pip install djangorestframework-simplejwt

2、配置項(xiàng)目

編輯 settings.py 文件,添加 rest_framework 和 rest_framework_simplejwt 到 INSTALLED_APPS: 

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework_simplejwt',
    'rest_framework_simplejwt.token_blacklist',
    ...
]

3、配置JWT

3.1 配置默認(rèn)認(rèn)證類(lèi)和權(quán)限類(lèi)

在 settings.py 中配置默認(rèn)的認(rèn)證類(lèi)和權(quán)限類(lèi): 

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

3.2 配置JWT設(shè)置

在 settings.py 中配置 JWT 的一些選項(xiàng),例如 token 的過(guò)期時(shí)間、簽名算法等:

from datetime import timedelta

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUTH_HEADER_TYPES': ('Bearer',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
}

4、創(chuàng)建視圖和序列化器

4.1 創(chuàng)建自定義 Token 視圖

創(chuàng)建一個(gè)視圖來(lái)處理登錄請(qǐng)求,返回 JWT token。

# views.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenBlacklistView
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from django.contrib.auth.models import User
from .serializers import RegisterSerializer

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

class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer

class RegisterView(APIView):
    def post(self, request, *args, **kwargs):
        serializer = RegisterSerializer(data=request.data)
        if serializer.is_valid():
            user = serializer.save()
            return Response({
                "user": UserSerializer(user, context=self.get_serializer_context()).data,
                "message": "User Created Successfully.  Now perform Login to get your token",
            })
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

# serializers.py
from rest_framework import serializers
from django.contrib.auth.models import User

class RegisterSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password', 'email')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create_user(
            username=validated_data['username'],
            email=validated_data['email'],
            password=validated_data['password']
        )
        return user

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')

4.2 配置URL

在 urls.py 中配置 URL 路由,以便訪問(wèn)登錄、注冊(cè)、刷新和注銷(xiāo)視圖:

# urls.py
from django.urls import path
from .views import MyTokenObtainPairView, RegisterView

urlpatterns = [
    path('login/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('login/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('logout/', TokenBlacklistView.as_view(), name='token_blacklist'),
    path('register/', RegisterView.as_view(), name='auth_register'),
]

5、測(cè)試API

使用 Postman 或其他 HTTP 客戶(hù)端來(lái)測(cè)試你的 API。以下是一些示例請(qǐng)求:

5.1 注冊(cè)新用戶(hù)

URL: /register/
Method: POST
Body:

{
  "username": "testuser",
  "email": "testuser@example.com",
  "password": "testpassword"
}

5.2 登錄并獲取JWT token

URL: /login/
Method: POST
Body:

{
  "username": "testuser",
  "password": "testpassword"
}

5.3 刷新JWT token

URL: /login/refresh/
Method: POST
Body:

{
  "refresh": "your_refresh_token"
}

5.4 注銷(xiāo)(將token加入黑名單)

URL: /logout/
Method: POST
Body:

{
  "refresh": "your_refresh_token"
}

6、總結(jié)

通過(guò)以上步驟,我們成功地在 Django REST Framework 項(xiàng)目中實(shí)現(xiàn)了 JWT 認(rèn)證,并配置了 token 黑名單以增強(qiáng)安全性。JWT 認(rèn)證提供了一種無(wú)狀態(tài)、輕量級(jí)的身份驗(yàn)證方式,而 token 黑名單則確保了已注銷(xiāo)的 token 不會(huì)被再次使用,從而提高了應(yīng)用的安全性。

到此這篇關(guān)于Django REST Framework (DRF) 項(xiàng)目中實(shí)現(xiàn)JWT的示例代碼的文章就介紹到這了,更多相關(guān)Django REST Framework JWT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用python實(shí)現(xiàn)平穩(wěn)時(shí)間序列的建模方式

    利用python實(shí)現(xiàn)平穩(wěn)時(shí)間序列的建模方式

    這篇文章主要介紹了利用python實(shí)現(xiàn)平穩(wěn)時(shí)間序列的建模方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python中的多線(xiàn)程實(shí)例教程

    python中的多線(xiàn)程實(shí)例教程

    這篇文章主要介紹了python中的多線(xiàn)程用法,包括線(xiàn)程的創(chuàng)建、同步等核心問(wèn)題,具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • Python中的字符串替換操作示例

    Python中的字符串替換操作示例

    這篇文章主要介紹了Python中的字符串替換操作示例,包括一則使用字符串模板string.Template的例子及一則使用正則表達(dá)式的例子,需要的朋友可以參考下
    2016-06-06
  • 詳解python如何引用包package

    詳解python如何引用包package

    在本篇文章里小編給大家整理的是關(guān)于python中引用包方法及相關(guān)實(shí)例,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python中實(shí)現(xiàn)輸入一個(gè)整數(shù)的案例

    Python中實(shí)現(xiàn)輸入一個(gè)整數(shù)的案例

    這篇文章主要介紹了Python中實(shí)現(xiàn)輸入一個(gè)整數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Django開(kāi)發(fā)的簡(jiǎn)易留言板案例詳解

    Django開(kāi)發(fā)的簡(jiǎn)易留言板案例詳解

    這篇文章主要介紹了Django開(kāi)發(fā)的簡(jiǎn)易留言板,結(jié)合實(shí)例形式詳細(xì)分析了基于Python框架Django開(kāi)發(fā)留言板的具體文件結(jié)構(gòu)、流程步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • PyTorch?可視化工具TensorBoard和Visdom

    PyTorch?可視化工具TensorBoard和Visdom

    這篇文章主要介紹了PyTorch?可視化工具TensorBoard和Visdom,TensorBoard?一般都是作為?TensorFlow?的可視化工具,與?TensorFlow?深度集成,它能夠展現(xiàn)?TensorFlow?的網(wǎng)絡(luò)計(jì)算圖,繪制圖像生成的定量指標(biāo)圖以及附加數(shù)據(jù)等,下面來(lái)看文章得具體內(nèi)容介紹吧
    2022-01-01
  • Python線(xiàn)程指南詳細(xì)介紹

    Python線(xiàn)程指南詳細(xì)介紹

    本文介紹了Python對(duì)于線(xiàn)程的支持,包括學(xué)會(huì)多線(xiàn)程編程需要掌握的基礎(chǔ)以及Python兩個(gè)線(xiàn)程標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例
    2017-01-01
  • PHP魔術(shù)方法__ISSET、__UNSET使用實(shí)例

    PHP魔術(shù)方法__ISSET、__UNSET使用實(shí)例

    這篇文章主要介紹了PHP魔術(shù)方法__ISSET、__UNSET使用實(shí)例,本文直接給出代碼示例,需要的朋友可以參考下
    2014-11-11
  • python 使用get_argument獲取url query參數(shù)

    python 使用get_argument獲取url query參數(shù)

    這篇文章主要介紹了python 使用get_argument獲取url query參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

呼伦贝尔市| 兴城市| 安福县| 邓州市| 中江县| 荣昌县| 德昌县| 娄底市| 三都| 塔河县| 霞浦县| 穆棱市| 宜都市| 武定县| 连州市| 平武县| 驻马店市| 怀集县| 略阳县| 互助| 清水县| 甘谷县| 宝丰县| 湖北省| 平乡县| 阳江市| 固安县| 湖南省| 来安县| 平泉县| 咸丰县| 阿合奇县| 邵东县| 尼勒克县| 保康县| 财经| 察哈| 通海县| 洪湖市| 文化| 墨玉县|