我正在通过 DRF、React 和 Axios 进行用户会话身份验证。我还使用 Postman 来测试我的端点。所以问题是如何使rest_framework.urls 的默认登录视图使用JSON 格式。当我通过 Postman 内的表单数据单选按钮发送用户数据(用户名和密码)时,一切都按预期工作。但是当我在 Postman 和 Axios 中使用 JSON 格式时,DRF 端点返回这样的 html 页面:
设置.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
]
}
url.py
urlpatterns = [
path('drf-auth/', include('rest_framework.urls')),
]
我的 JSON 数据
{"username": "admin", "password": "admin"}
默认
rest_framework.urls
登录视图接受表单数据并返回 JSON 响应。不接受 JSON 数据。要解决此问题,请创建自定义登录视图,然后在视图中使用函数 authenticate
和 login
。这将接受 JSON 数据。
views.py
class CustomLoginView(APIView):
def post(self, request):
user=authenticate(request, username=request.data.get("username"), password=request.data.get("password"))
if user is not None:
login(request, user)
return Response... # success response
else:
return Response .... # error response