使用Simple-JWT通过JWT认证保护Django REST API的项目示例

2025-04-07T17:47:06+08:00 | 3分钟阅读 | 更新于 2025-04-07T17:47:06+08:00

Macro Zhao

使用Simple-JWT通过JWT认证保护Django REST API的项目示例

推荐超级课程:

@TOC

在Django Rest Framework (DRF)中使用Simple-JWT的JWT (JSON Web Tokens)认证是保护API的流行选择。Simple-JWT是一个为Django应用程序提供直接JWT认证的库。让我们逐步介绍如何在Django Rest Framework中使用Simple-JWT设置JWT认证,包括一个真实项目示例。

步骤1:安装所需包

安装Django、Django Rest Framework和Simple-JWT:

pip install django djangorestframework djangorestframework_simplejwt

步骤2:设置Django项目

如果你还没有创建,请创建一个新的Django项目:

django-admin startproject <myproject>  
cd myproject

<myproject>替换为你项目的所需名称。这个命令将生成一个包含指定项目名称的新目录,其中包含你项目所需的文件和目录。我们的项目可能如下所示:

myproject/  
├─── myproject/  
|    ├── __init__.py  
|    ├── settings.py  
|    ├── urls.py  
|    ├── wsgi.py  
|    └── asgi.py  
└─── manage.py

步骤3:设置Django应用

在项目中创建一个新的Django应用:

python manage.py startapp <myapp>

<myapp>替换为你应用的所需名称。创建应用后,我们的项目可能如下所示:

myproject/  
├── myproject/  
|   ├── __init__.py  
|   ├── settings.py  
|   ├── urls.py  
|   ├── wsgi.py  
|   └── asgi.py  
├── myapp/  
│   ├── __init__.py  
│   ├── admin.py  
│   ├── apps.py  
│   ├── migrations/  
│   │   └── __init__.py  
│   ├── models.py  
│   ├── tests.py  
│   ├── urls.py  
│   └── views.py  
└── manage.py

步骤 4:配置 Django Rest Framework

在项目的 settings.py 文件中的 INSTALLED_APPS 添加 ‘rest_framework’ 和 ‘rest_framework_simplejwt’:

INSTALLED_APPS = [  
    # 所有默认应用放在这里  
  
    'rest_framework',  
    'rest_framework_simplejwt',  
  
    'myapp',  # 将 'myapp' 替换为你的应用名称  
]

步骤 5:配置 JWT 设置

在你的 settings.py 文件中,配置 Simple-JWT 设置。以下是一个基本配置:

# settings.py  
from datetime import timedelta # 在 settings.py 文件顶部导入这个库  
  
# 在 settings.py 文件中的 INSTALLED_APPS 下面放置以下内容  
REST_FRAMEWORK = {  
    'DEFAULT_PERMISSION_CLASSES': (  
        'rest_framework.permissions.IsAuthenticated',  
    ),  
    'DEFAULT_AUTHENTICATION_CLASSES': (  
        'rest_framework_simplejwt.authentication.JWTAuthentication',  
    ),  
}  
  
SIMPLE_JWT = {  
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),  
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),  
    'SLIDING_TOKEN_LIFETIME': timedelta(days=30),  
    'SLIDING_TOKEN_REFRESH_LIFETIME_LATE_USER': timedelta(days=1),  
    'SLIDING_TOKEN_LIFETIME_LATE_USER': timedelta(days=30),  
}

步骤 6:令牌端点

在项目的 urls.py 中包含 Simple-JWT 令牌端点:

from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView  
from django.contrib import admin  
from django.urls import path, include  
  
  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),  
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),      
    path('', include('myapp.urls')), # 在这里包含你的应用 urls.py  
]

步骤 7:创建 API 视图

在应用中的 myapp/views.py 创建你的 API 视图。这些是需要认证的端点。

from rest_framework.views import APIView  
from rest_framework.response import Response  
from rest_framework.permissions import IsAuthenticated  
from rest_framework_simplejwt.authentication import JWTAuthentication  
  
  
  
class Home(APIView):  
    authentication_classes = [JWTAuthentication]  
    permission_classes = [IsAuthenticated]  
  
    def get(self, request):  
        content = {'message': 'Hello, World!'}  
        return Response(content)

步骤 8:URL 配置

首先在应用中创建 myapp/urls.py 文件。然后在应用中的 myapp/urls.py 配置你的 URL:

touch myapp/urls.py
from django.urls import path  
from .views import Home  
  
  
urlpatterns = [  
    path('', Home.as_view()),  
]

步骤 9:运行迁移

最后,运行以下命令以应用你的应用的任何数据库迁移:

python manage.py migrate

步骤 10:测试

创建用于测试的超级用户并运行服务器,请执行以下命令:

python manage.py createsuperuser  
python manage.py runserver

现在,您可以使用Postman等工具测试您的API端点。通过向(http://127.0.0.1:8000/api/token/ )发送POST请求并使用有效的用户凭据(如下截图所示)来获取访问令牌。

然后,使用此访问令牌向受认证的端点(如:http://127.0.0.1:8000/ )发送请求,类型需更改为Bearer Token

步骤11:总结

您现在已经使用Simple-JWT在Django Rest Framework中设置了JWT认证。这为在您的Django API中认证用户和访问受保护资源提供了一种安全的方式。请确保在客户端应用程序中适当地处理令牌过期和刷新。

有关更多详细信息,您可以参考Django的simple-JWT 文档。

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee