我的django代码中有一个注册视图,工作正常:
在Django休息框架中工作,
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
@list_route(methods=['post'])
def register(self, request):
serializer = UserSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
现在我想添加登录视图以便让用户登录,我写了这样的内容,对此不确定:
@list_route(methods=['post'])
def login(self, request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return Response(status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_404_NOT_FOUND)
else:
return Response(status=status.HTTP_401_UNAUTHORIZED)
几个问题:
答案 0 :(得分:1)
使用DRF登录方法不正确。 登录时你没有使用过串口。 您可以通过这些api进行登录,注销等以获得清晰的理解
Djoser Djoser库提供了一组视图来处理基本操作,例如注册,登录,注销,密码重置和帐户激活。该程序包使用自定义用户模型,并使用基于令牌的身份验证。这是Django身份验证系统的随时可用的REST实现。
django-rest-auth Django-rest-auth库提供了一组REST API端点,用于注册,身份验证(包括社交媒体身份验证),密码重置,检索和更新用户详细信息等。通过使用这些API端点,您的客户端应用程序,如AngularJS,iOS, Android和其他人可以通过REST API独立地与您的Django后端站点进行通信以进行用户管理。
答案 1 :(得分:0)
你的*寄存器正在使用@list_route模式监听post方法,你还希望用* list_route绑定你的* login再次发帖?!?
这是不可能的,如果你问我我更喜欢用APIView类型实现我的认证类
创建您的登录(views.APIView),如下所示:
class LoginView(views.APIView):
def post(self, request, format=None):
data = request.data
username = data.get('username', None)
password = data.get('password', None)
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return Response(status=status.HTTP_200_OK)
else:
return Response(status=status.HTTP_404_NOT_FOUND)
else:
return Response(status=status.HTTP_404_NOT_FOUND)