如何更改Django auth登录api的响应格式

如何更改Django auth登录api的响应格式,django,django-rest-framework,django-authentication,Django,Django Rest Framework,Django Authentication,我当前正在使用它的登录令牌创建端点,成功后,该端点将使用以下数据进行响应: { "access_token": "************", "token_type": "Bearer", "expires_in": 36000, "refresh_token": "************", "scope": "read write" } 但我想更改格式并将数据包装为该格式: { "status" : true, "data" :{ "access

我当前正在使用它的登录令牌创建端点,成功后,该端点将使用以下数据进行响应:

{
  "access_token": "************",
  "token_type": "Bearer",
  "expires_in": 36000,
  "refresh_token": "************",
  "scope": "read write"
}
但我想更改格式并将数据包装为该格式:

{
  "status" : true,
  "data" :{
      "access_token": "************",
      "token_type": "Bearer",
      "expires_in": 36000,
      "refresh_token": "************",
      "scope": "read write"
    }
}
我阅读了Django文档并尝试扩展库视图,但没有显示任何更改

from rest_framework_social_oauth2.views import TokenView 

    @api_view(('POST'))
    def post(self, request, *args, **kwargs):
        # Use the rest framework `.data` to fake the post body of the django request.
        request._request.POST = request._request.POST.copy()
        for key, value in request.data.items():
            request._request.POST[key] = value

        url, headers, body, status = self.create_token_response(request._request)
        response = Response(data=json.loads(body), status=status)

        for k, v in headers.items():
            response[k] = v
        return response

我建议创建并扩展DRF-social-oauth2,它有一个创建令牌的方法post:

views.py:

super方法将创建所需的令牌,然后您可以按照所示操作响应,如果需要,还可以使用大量其他方法操作响应

您还需要在url.py中添加url端点以进行身份验证:

from my_project/my_app import MyTokenView

urlpatterns = [
    ...
    url(
        r'^my_api/authenticate/$', 
        MyTokenView.as_view(), 
        name='authenticate'),
    ...
]

请记住:既然您正在扩展TokenView类,那么您也应该处理失败响应。

我建议创建并扩展DRF-social-oauth2,它有一个方法post来创建令牌:

views.py:

super方法将创建所需的令牌,然后您可以按照所示操作响应,如果需要,还可以使用大量其他方法操作响应

您还需要在url.py中添加url端点以进行身份验证:

from my_project/my_app import MyTokenView

urlpatterns = [
    ...
    url(
        r'^my_api/authenticate/$', 
        MyTokenView.as_view(), 
        name='authenticate'),
    ...
]

请记住:既然您要扩展TokenView类,那么您也应该处理失败响应。

Hi,您必须将name param值更改为authorize,它工作得非常好。多谢@user8169843很乐意帮助mate:。如果您愿意,您可以点击tic图标接受答案!当之无愧再次感谢!有没有办法返回user_id作为响应,我想我需要为它创建一个自定义后端?@user8169843如果你看到上面的帖子,它有一个名为request的参数。将其用作request.user.id或request.user.pk.Hi,必须更改name param值以进行授权,并且工作正常。多谢@user8169843很乐意帮助mate:。如果您愿意,您可以点击tic图标接受答案!当之无愧再次感谢!有没有办法返回user_id作为响应,我想我需要为它创建一个自定义后端?@user8169843如果你看到上面的帖子,它有一个名为request的参数。将其用作request.user.id或request.user.pk。