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 提供了便利和可靠的解决方案。