#django #django-rest-framework #django-socialauth #django-oauth
#django #django-rest-framework #django-socialauth #django-oauth
Вопрос:
Я создаю систему API, которая следует по URL, подобному localhost:8080/api/v1/end_name
, и я использую библиотеку django-rest-framework-social-oauth2 для социальной аутентификации, а также для моей пользовательской аутентификации пользователя. Проблема в том, что они предоставляют ответ api для URL, подобного 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: {}
. Мой единственный вопрос
- Как я могу это сделать?
Мой другой вопрос
- Могу ли я настроить URL-адрес api
localhost:8080/auth/token
наlocalhost:8080/api/v1/auth/token
?
Ответ №1:
в конце концов я нашел решение. Чтобы создать пользовательский ответ, мне пришлось переопределить их метод и настроить ответ в соответствии с моими потребностями. Здесь вызываемый метод назван 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.