使用Django Rest+;返回的不仅仅是身份验证令牌;乔瑟?

使用Django Rest+;返回的不仅仅是身份验证令牌;乔瑟?,django,django-rest-framework,djoser,Django,Django Rest Framework,Djoser,我正在使用Django REST和Djoser作为身份验证服务。但是,当向djoser auth端点发出post请求时,例如,../auth/token/login,我得到的唯一响应是auth\u token:xxxxx 例如,如果我成功提出post请求,例如: { "username": "joe@gmail.com", "password": "test12345" } 我的回答是 “身份验证令牌”:“XXXXXXXX” 但我想检索的不仅仅是一个令牌,例如 "auth_token"

我正在使用Django REST和Djoser作为身份验证服务。但是,当向djoser auth端点发出post请求时,例如,
../auth/token/login
,我得到的唯一响应是
auth\u token:xxxxx

例如,如果我成功提出post请求,例如:

{
  "username": "joe@gmail.com",
  "password": "test12345"
}
我的回答是

“身份验证令牌”:“XXXXXXXX”

但我想检索的不仅仅是一个令牌,例如

"auth_token": "XXXXXXXX",
"user_id": 8

您知道如何实现这一点吗?

创建您自己的自定义令牌获取视图,如下所示

from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token


class TokenObtainView(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data,
                                           context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        custom_response = {
            'token': token.key,
            'user_id': user.id
        }
        return Response(custom_response)

现在,您应该使用端点,
path/to/your/custom/token/view/
来获取自定义响应。

创建您自己的自定义token获取视图,如下所示

from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token


class TokenObtainView(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data,
                                           context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        custom_response = {
            'token': token.key,
            'user_id': user.id
        }
        return Response(custom_response)

现在,您应该使用端点,
path/to/your/custom/token/view/
来获得定制的响应。

问题有点不清楚,您想解决什么问题?既然您发送用户名和密码来获取令牌,那么您真的需要/想要在响应中获取它们吗?基本上,当我使用用户名和密码向
../auth/token/login
发出post请求时-如果该密码和用户名有效,我将以
“auth\u令牌”:“xxxxx”
的形式返回响应。我想返回类似于
“auth_token”:“xxxx”,“user_id”:8
您需要自定义Djoser使用的类。Django文档中已经有一个很好的示例,可以做您想要做的事情:,请参阅CustomAuthToken(获取AuthToken)类示例。问题有点不清楚,您想解决什么问题?既然您发送用户名和密码来获取令牌,那么您真的需要/想要在响应中获取它们吗?基本上,当我使用用户名和密码向
../auth/token/login
发出post请求时-如果该密码和用户名有效,我将以
“auth\u令牌”:“xxxxx”
的形式返回响应。我想返回类似于
“auth_token”:“xxxx”,“user_id”:8
您需要自定义Djoser使用的类。Django文档中已经有一个很好的示例,可以执行您想要的操作:,请参见CustomAuthToken(获取AuthToken)类示例。