Python 无法使用Django身份验证

Python 无法使用Django身份验证,python,django,Python,Django,我收到这个错误: TypeError at /auth/ authenticate() missing 1 required positional argument: 'request' 我正在使用Django和Django Rest框架 HTTP POST如下所示: { "username": "HelloUser", "password": "Hello123" } 查看 @csrf_exempt @api_view(['POST']) def authenticate(

我收到这个错误:

TypeError at /auth/
authenticate() missing 1 required positional argument: 'request'
我正在使用Django和Django Rest框架

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'})
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'})
URL

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'))
]
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'))
]

首先,您不应该将视图的名称用作authenticate,因为它与Django auth的authenticate混合在一起 第二,您不需要身份验证视图中的self参数,即def authenticate\u用户(请求) 按如下方式更新代码:

{
    "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'})
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'})
并且您的URL.py将根据视图的名称进行更新:

URL

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'))
]
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'))
]