【发布时间】:2018-08-08 19:40:49
【问题描述】:
我正在使用 Django Rest 框架开发 API 后端。我最初使用会话身份验证开发它,不知道它不能用于发送到移动应用程序。我在 Postman 中尝试用户登录时遇到了 CSRF 保护方面的问题。
现在,由于我必须转向基于令牌的身份验证才能使其正常工作,我该怎么做呢?我想知道如何快速实施它。我已经浏览了有关 * 的教程和答案,但无法在实践中实现这一点
另外,令牌认证是最适合的认证方法吗?我应该使用默认提供的 DRF 模块或 JWT 还是其他一些实现?我可以只对用户登录使用令牌身份验证,而对其他 3 个 API 使用会话身份验证吗?
class UserLogin(APIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def post(self, request, format='json'):
username = request.POST.get('username')
email = request.POST.get('email')
password = request.POST.get('password')
user = EmailBackend.authenticate(self,username = email, password = password)
if user:
id = user.id
return Response(id, status=status.HTTP_201_CREATED)
else:
return Response("Failure", status=HTTP_400_BAD_REQUEST)
class UserRegistration(APIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def post(self, request, format='json'):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
if user:
return Response('Success', status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
class RecommendationQuestions(generics.ListCreateAPIView):
def post(self, request, format = 'json'):
"""Save the post data when logging in."""
uid = request.data['user_id']
resp_list = MovieSerializer.provide_movie_choices(uid)
return Response(resp_list, status=status.HTTP_400_BAD_REQUEST)
class RecommendationGenerator(generics.ListCreateAPIView):
queryset = Ratings.objects.all()#.filter(id__in=(1,2))
serializer_class= RatingsSerializer#(queryset,many=True)
def post(self, request, format='json'):
many = isinstance(request.data, list)
serializer = RatingsSerializer(data = request.data, many = many)
x = 0
if serializer.is_valid():
uid = [d['userId'] for d in serializer.data]
resp_list = RatingsSerializer.generate_recommendations(self, uid[0])
return Response(resp_list, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
这是 API 的 views.py。
【问题讨论】:
标签: python django django-rest-framework