Django REST framework JWT

1. 介绍

Django REST framework 是一个用于构建 Web API 的强大框架,它简化了开发人员构建和测试 API 的过程。而JWT(JSON Web Token)是一种用于在网络中传输信息的安全方式。Django REST framework JWT(简称DRF JWT)是一个为 Django REST framework 提供 JWT 认证功能的插件。

2. 安装和配置

2.1 安装

要安装 DRF JWT,可以使用 pip 命令:

pip install djangorestframework-jwt

2.2 配置

在 Django 项目的 settings.py 文件中,需要进行一些配置以启用 DRF JWT。首先,需要添加以下配置:

REST_FRAMEWORK = {

'DEFAULT_AUTHENTICATION_CLASSES': (

'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

...

),

...

}

接下来,需要配置 JWT 的一些参数,例如密钥和过期时间:

JWT_AUTH = {

'JWT_SECRET_KEY': SECRET_KEY,

'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),

'JWT_ALLOW_REFRESH': True,

'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30),

}

这里的 SECRET_KEY 是 Django 项目的密钥,用于加密 JWT。JWT_EXPIRATION_DELTA 设置了 Token 的有效期,JWT_ALLOW_REFRESH 设置允许刷新 Token,JWT_REFRESH_EXPIRATION_DELTA 设置了刷新 Token 的有效期。

3. 使用 JWT 认证

3.1 用户登录

要使用 JWT 认证,首先需要用户登录并获取 Token。可以在 Django 项目的一个视图函数中添加以下代码:

from rest_framework_jwt.views import obtain_jwt_token

def login_view(request):

if request.method == 'POST':

return obtain_jwt_token(request)

上述代码将会返回一个包含 Token 的 JSON 响应。可以在登录成功后将 Token 存储在客户端,并在后续的 API 请求中进行身份验证。

3.2 API 认证

要在 API 中使用 JWT 认证,可以使用 DRF JWT 提供的装饰器或认证类。以下是一个使用装饰器的示例:

from rest_framework.views import APIView

from rest_framework_jwt.authentication import JSONWebTokenAuthentication

from rest_framework.permissions import IsAuthenticated

from rest_framework.response import Response

class ProtectedView(APIView):

authentication_classes = [JSONWebTokenAuthentication]

permission_classes = [IsAuthenticated]

def get(self, request):

return Response({'message': 'You are authenticated.'})

在上述代码中,ProtectedView 类继承自 APIView,使用了 JSONWebTokenAuthentication 进行身份验证,同时还使用了 IsAuthenticated 权限类来限制只有认证的用户才能访问。

3.3 刷新 Token

JWT Tokens 是有限期的,但可以刷新。可以在 Django 项目的一个视图函数中添加以下代码来刷新 Token:

from rest_framework_jwt.views import refresh_jwt_token

def refresh_view(request):

if request.method == 'POST':

return refresh_jwt_token(request)

上述代码将会返回一个包含刷新后的 Token 的 JSON 响应,这可以用于更新客户端上存储的 Token。

4. 总结

通过使用 Django REST framework JWT,我们可以轻松地为 Django REST framework 的 API 添加 JWT 认证功能。配置和使用也非常简单,只需进行少量的设置即可实现用户登录、API 认证和 Token 刷新等功能。JWT 认证为我们构建安全的 Web API 提供了便利和可靠的解决方案。

后端开发标签