djangorestframework-jwt使用

发布时间 2023-04-26 11:29:49作者: LAlexH

服务端配置

安装第三方库

pip install djangorestframework-jwt

在settings.py中配置JWT

## 可以在这里配置全局的认证,也可以在视图中单独配置。
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        # 其他身份验证方法(可选)
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
        # 其他权限(可选)
    ],
}

JWT_AUTH = {
    'JWT_SECRET_KEY': 'your-secret-key',
    'JWT_ALGORITHM': 'HS256',
    'JWT_VERIFY': True,
    'JWT_VERIFY_EXPIRATION': True,
    'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=1),
    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
    'JWT_AUTH_HEADER_PREFIX': 'JWT',
}

在urls.py中配置路由

from django.urls import path

urlpatterns = [
    # ...
    path(r"api-token-auth/", obtain_jwt_token, name="api-token-auth"),
]

客户端(Python)代码示例:

import requests

username = input("请输入用户名:")
password = input("请输入密码:")

response = requests.post(
    'http://localhost:8000/api/token/',
    data={'username': username, 'password': password}
)
response_data = response.json()

### 将JWT Token保存在客户端中,用于后续的请求
token = response_data['token']
headers = {'Authorization': f'JWT {token}'}

# 发送请求时带上JWT Token
response = requests.get(
    'http://localhost:8000/api/test/',
    headers=headers
)
response_data = response.json()