如何更改 Django 身份验证登录的响应格式 api
How to change response format of Django auth login api
我目前正在使用 Django-rest-framework-social-oauth2 并且它是登录令牌创建端点,成功后会返回以下数据:
{
"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
我建议创建一个 class based view and extend DRF-social-oauth2's TokenView
,它有一个方法 post
来创建令牌:
views.py
:
from rest_framework_social_oauth2.views import TokenView
class MyTokenView(TokenView):
def post(self, request, *args, **kwargs):
response = super(MyTokenView, self).post(request, *args, **kwargs)
return Response({
'status': Your_Status,
'data': response.data,
}, status=response.status_code)
.super
方法将创建所需的令牌,然后您可以如图所示操作给出的响应(如果需要,还可以使用多种其他方式!)。
您还需要在 urls.py
中添加一个 url 端点以进行身份验证:
from my_project/my_app import MyTokenView
urlpatterns = [
...
url(
r'^my_api/authenticate/$',
MyTokenView.as_view(),
name='authenticate'),
...
]
请记住: 由于您正在扩展 TokenView
class 您应该处理 失败响应 还有。
我目前正在使用 Django-rest-framework-social-oauth2 并且它是登录令牌创建端点,成功后会返回以下数据:
{
"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
我建议创建一个 class based view and extend DRF-social-oauth2's TokenView
,它有一个方法 post
来创建令牌:
views.py
:from rest_framework_social_oauth2.views import TokenView class MyTokenView(TokenView): def post(self, request, *args, **kwargs): response = super(MyTokenView, self).post(request, *args, **kwargs) return Response({ 'status': Your_Status, 'data': response.data, }, status=response.status_code)
.super
方法将创建所需的令牌,然后您可以如图所示操作给出的响应(如果需要,还可以使用多种其他方式!)。您还需要在
urls.py
中添加一个 url 端点以进行身份验证:from my_project/my_app import MyTokenView urlpatterns = [ ... url( r'^my_api/authenticate/$', MyTokenView.as_view(), name='authenticate'), ... ]
请记住: 由于您正在扩展 TokenView
class 您应该处理 失败响应 还有。