Ofe*_*mon 2 python django login django-rest-framework
我的 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)
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个登录视图以让用户登录,我写了这样的东西,不确定这个:
@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)
Run Code Online (Sandbox Code Playgroud)
几个问题:
您使用 DRF 的登录方法不正确。对于登录,您还没有使用序列化程序。您可以通过这些 api 进行登录、注销等以获得清晰的理解
Djoser Djoser 库提供了一组视图来处理基本操作,例如注册、登录、注销、密码重置和帐户激活。该包使用自定义用户模型,并使用基于令牌的身份验证。这是一个随时可用的 Django 身份验证系统的 REST 实现。
django-rest-auth Django-rest-auth 库提供了一组 REST API 端点,用于注册、身份验证(包括社交媒体身份验证)、密码重置、检索和更新用户详细信息等。通过拥有这些 API 端点,您的客户端应用程序例如因为 AngularJS、iOS、Android 和其他可以通过 REST API 独立地与您的 Django 后端站点通信以进行用户管理。
小智 5
您的 *register 正在使用 @list_route 模式监听 post 方法,并且您还想将您的 *login 绑定到 @list_route 再次发布?!?
这是不可能的,如果你问我我更喜欢用 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8834 次 |
| 最近记录: |