【发布时间】:2017-02-27 05:07:47
【问题描述】:
我是一名实习生,正在从事一个项目,我在该项目中开发 DRF API,该 API 需要与我的同事使用 Ionic 框架编写的移动应用程序进行交互。 我们正在创建新用户。我的查看方法如下:
class NewUser(generics.CreateAPIView):
model = User
permission_classes = [permissions.AllowAny]
serializer_class = NewUserSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
token, created = Token.objects.get_or_create(user=serializer.instance)
return Response({'token': token.key}, status=status.HTTP_201_CREATED, headers=headers)
当有人想通过 POST 请求创建新用户时,如果用户名尚未被使用,则 API 返回 201 状态代码和 JSON 中的令牌,如果用户名已被使用,则返回 400 状态和 JSON 中的错误消息。当我的同事尝试使用已经存在的名称创建用户名时,我的同事要求我将状态消息更改为 200。他说他不能使用 ERROR 响应。 他的代码如下:
$http.post(url,{
username:$scope.tel,
password:$scope.passwd
}).success(function(data){
alert(data);
$ionicLoading.hide();
console.log(data);
})
问题: 1) 我是否应该调整我的 API 以发送 200 状态而不是更符合逻辑的 400 以显示“用户已注册”错误? 我试图更改我的代码,但在 DRF 的 CreateAPIView/ModelSerializer 中找不到要覆盖的方法。我最终将我的视图类重写为方法:
@api_view(['POST'])
def newUser(request):
"""
Saves a new user on the database
"""
if request.method == 'POST':
serializer = NewUserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
token, created = Token.objects.get_or_create(user=serializer.instance)
return Response({'token': token.key}, status=status.HTTP_201_CREATED, headers=serializer.data)
else:
return Response(serializer.errors, status=status.HTTP_200_OK)
问题: 2)如果我想改变 API 和响应的行为,我应该覆盖哪个方法 3)我是 Django 新手,但仍然不知道我们应该在哪里使用通用视图 VS。 @.... 方法
【问题讨论】:
标签: angularjs json django ionic-framework django-rest-framework