django写token
时间: 2024-09-27 12:07:16 浏览: 48
django基于存储在前端的token用户认证解析
在Django中,Token通常是指用于身份验证的一种机制,特别是用于API请求的身份验证,比如JWT(JSON Web Tokens)。JWT是一个包含用户信息的标准格式,服务器在响应给客户端成功认证后会生成一个Token,客户端需要在后续的所有API请求头中附带这个Token。
以下是使用Django Rest Framework (DRF)创建JWT Token的基本步骤:
1. 安装依赖:首先安装`djangorestframework-jwt`库:
```
pip install djangorestframework-jwt
```
2. 配置设置:在`settings.py`中添加JWT配置,如密钥、序列化器等:
```python
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
]
}
JWT_AUTH = {
'JWT_SECRET_KEY': 'your_secret_key', # 密钥
'JWT_GET_USER_ID_FROM_PAYLOAD': lambda payload: payload.get('user_id'),
'JWT_RESPONSE_PAYLOAD_HANDLER': jwt_response_payload_handler,
}
```
3. 创建序列化器:`jwt_response_payload_handler`函数允许自定义返回的Token数据结构,你可以创建一个JWTSerializer:
```python
from rest_framework_jwt.settings import api_settings
class MyTokenObtainPairSerializer(api_settings.JWT_TOKEN_SERIALIZER):
def to_representation(self, instance):
ret = super().to_representation(instance)
ret['username'] = instance.user.username
return ret
```
4. 视图函数:在视图中使用`obtain_pair()`方法来获取Token对:
```python
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_jwt.utils import jwt_response_payload_handler
class ObtainAuthToken(APIView):
permission_classes = [AllowAny]
throttle_scope = 'login'
def post(self, request):
serializer = MyTokenObtainPairSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
token = serializer.object
response = jwt_response_payload_handler(token, user, request)
return Response(response)
```
阅读全文