Django rest framework social oauth2 api url 和响应自定义
Django rest framework social oauth2 api url and response customization
我正在制作一个遵循 url 的 API 系统,就像 localhost:8080/api/v1/end_name
一样,我正在使用 django-rest-framework-social-oauth2 库进行社交身份验证,也用于我的自定义用户身份验证。问题是他们正在为 url 提供 api 响应,例如 localhost:8080/auth/token
以下格式
{
"access_token": "........",
"expires_in": 36000,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "......"
}
但我需要以我的方式自定义它,因为我的响应格式不同。我的喜欢以下..
{
"error": false,
"message": "User created successfully",
"data": {
"email": "localtestuse2@beliefit.com"
}
}
我需要 data: {}
中的回复。我的一个问题是
- 我该怎么做?
我的另一个问题是
- 我可以将 api url
localhost:8080/auth/token
自定义为 localhost:8080/api/v1/auth/token
吗?
我最终想出了解决方案。要进行自定义响应,我必须重写他们的方法并根据我的需要自定义响应。这里调用的方法名为 TokenView
。所以我按照以下方式定制了它
class UserLoginView(TokenView):
@method_decorator(sensitive_post_parameters("password"))
def post(self, request, *args, **kwargs):
url, headers, body, status = self.create_token_response(request)
# body is str here, we need to make it proper json
data = json.loads(body)
if status != 200:
response = Response(makeContext(True, "Couldn't generated token", data))
else:
response = Response(makeContext(False, "Token generated successfully", data))
response.accepted_renderer = JSONRenderer()
response.accepted_media_type = "application/json"
response.renderer_context = {}
return response
这里makecontext
是我定制的json制作方法。
我正在制作一个遵循 url 的 API 系统,就像 localhost:8080/api/v1/end_name
一样,我正在使用 django-rest-framework-social-oauth2 库进行社交身份验证,也用于我的自定义用户身份验证。问题是他们正在为 url 提供 api 响应,例如 localhost:8080/auth/token
以下格式
{
"access_token": "........",
"expires_in": 36000,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "......"
}
但我需要以我的方式自定义它,因为我的响应格式不同。我的喜欢以下..
{
"error": false,
"message": "User created successfully",
"data": {
"email": "localtestuse2@beliefit.com"
}
}
我需要 data: {}
中的回复。我的一个问题是
- 我该怎么做?
我的另一个问题是
- 我可以将 api url
localhost:8080/auth/token
自定义为localhost:8080/api/v1/auth/token
吗?
我最终想出了解决方案。要进行自定义响应,我必须重写他们的方法并根据我的需要自定义响应。这里调用的方法名为 TokenView
。所以我按照以下方式定制了它
class UserLoginView(TokenView):
@method_decorator(sensitive_post_parameters("password"))
def post(self, request, *args, **kwargs):
url, headers, body, status = self.create_token_response(request)
# body is str here, we need to make it proper json
data = json.loads(body)
if status != 200:
response = Response(makeContext(True, "Couldn't generated token", data))
else:
response = Response(makeContext(False, "Token generated successfully", data))
response.accepted_renderer = JSONRenderer()
response.accepted_media_type = "application/json"
response.renderer_context = {}
return response
这里makecontext
是我定制的json制作方法。