Django集成JWT实现身份认证完整教程

小石头
小石头
发布时间:2026-10-13 | 6人浏览过
原创

本文详细介绍如何在Django项目中集成JWT进行身份认证。涵盖环境要求(Django 2.2, Python 3.6等)、项目创建、依赖安装、数据库配置及路由设置。通过具体代码示例展示如何生成Token,并使用Postman进行接口测试,确保用户访问受保护资源时需携带有效Token。

环境依赖与版本要求

环境依赖清单如下:

  • Django版本:2.2
  • python版本:3.6
  • djangorestframework版本:3.1
  • djangorestframework-jwt版本:1.11
  • MySQL版本:5.7

注意:若使用Django 2.1以上版本,MySQL数据库版本必须高于5.5。

项目创建与配置

项目初始化步骤

1)在PyCharm中新建名为django_jwt的Django项目。

2)执行命令 python manage.py startapp django_restframework_jwt 创建名为django_restframework_jwt的应用。

3)在settings.py文件中添加应用注册代码:


INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',

  # 新添加
  'django_restframework_jwt',
  'rest_framework',
]

4)在settings.py中追加相关配置:


REST_FRAMEWORK = {
  'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated', #必须有
  ),
  'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
  )
}
import datetime
JWT_AUTH = {
 # 指明token的有效期
 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
}

5)修改settings.py中的数据库配置:


DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql', # 数据库的类别
    'NAME': 'test', # 数据库的名字
    'HOST': '127.0.0.1', # 数据库的ip
    'USER': 'root', # 用户名
    'PASSWORD': '5201314', # 密码
    'PORT': '3307'
  }
}

依赖安装与路由设置

6)在本地MySQL数据库中创建一个名为test的数据库;

7)安装所需依赖包:


pip install djangorestframework-jwt

pip install djangorestframework markdown Django-filter

8)在django_jwt/urls.py中配置路由:


from django.contrib import admin
from django.urls import path, include
from django_restframework_jwt.views import IndexView

urlpatterns = [
  path('admin/', admin.site.urls),
  path('jwt/', include('django_restframework_jwt.urls')),
  path('index/', IndexView.as_view(), name='index'),
]

视图开发与数据库迁移

9)在django_restframework_jwt/views.py中编写测试视图:


from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView


class IndexView(APIView):
  """
  首页
  """

  def get(self, request):
    return HttpResponse('首页')

10)新建django_restframework_jwt/urls.py文件,内容如下:


from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token

app_name = 'jwt'
urlpatterns = [
  path('jwt_token_auth/', obtain_jwt_token),

]

11)执行以下两条命令:


python manage.py makemigrations

python manage.py migrate

用户创建与接口测试

在数据库中创建相应的数据表。

12)创建一个超级用户,用于后续测试Token生成。


python manage.py createsuperuser

13)启动项目,打开Postman软件进行接口测试:

第一步测试成功,可获取到Token。

随后使用获取到的Token进行访问。

请求头中Token值前需添加“JWT”字样,并保留一个空格。

此时可正常访问首页;若Headers中未包含Token,则无法访问首页。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表