我收到此错误:
TypeError at /auth/
authenticate() missing 1 required positional argument: 'request'
我正在使用 Django 以及 Django Rest Framework。
HTTP POST 如下所示:
{
"username": "HelloUser",
"password": "Hello123"
}
查看
@csrf_exempt
@api_view(['POST'])
def authenticate(self, request):
print(request.data)
user = authenticate(username=request.data['username'], password=request.data['password'])
if user is not None:
return Response({'Status': 'Authenticated'})
else:
return Response({'Status': 'Unauthenticated'})
网址
urlpatterns = [
url(r'^', include(router.urls)),
url(r'create/', views.create),
url(r'retrieve/', views.retrieve),
url(r'auth/', views.authenticate),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
最佳答案
首先,您不应该将 View 名称用作authenticate,因为它会与 Django auth 的authenticate 混合在一起 其次,您不需要在身份验证 View 中使用 self 参数,即 defauthenticate_user(request) 像这样更新您的代码:
查看
from django.contrib.auth import authenticate
@csrf_exempt
@api_view(['POST'])
def authenticate_user(request):
print(request.data)
user = authenticate(username=request.data['username'], password=request.data['password'])
if user is not None:
return Response({'Status': 'Authenticated'})
else:
return Response({'Status': 'Unauthenticated'})
您的 urls.py 将根据 View 名称进行更新:
网址
urlpatterns = [
url(r'^', include(router.urls)),
url(r'create/', views.create),
url(r'retrieve/', views.retrieve),
url(r'auth/', views.authenticate_user),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
关于python - 无法使用 Django 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41355250/