【发布时间】:2014-05-10 17:03:02
【问题描述】:
我正在尝试创建一个 REST API 并且卡在用户注册上:基本上我需要在注册之前获得访问令牌。
这是视图:
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
def metadata(self, request):
"""
Don't include the view description in OPTIONS responses.
"""
data = super(UserViewSet, self).metadata(request)
return data
def create(self, request):
serializer = self.get_serializer(data=request.DATA, files=request.FILES)
if serializer.is_valid():
self.pre_save(serializer.object)
self.object = serializer.save(force_insert=True)
self.post_save(self.object, created=True)
self.object.set_password(self.object.password)
self.object.save()
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED,
headers=headers)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
这是解决方法:
@api_view(['POST'])
@permission_classes((AllowAny,))
@csrf_exempt
def create_auth(request, format=None):
data = JSONParser().parse(request)
serialized = UserSerializer(data=data)
if serialized.is_valid():
user = User.objects.create_user(
serialized.init_data['email'],
serialized.init_data['username'],
serialized.init_data['password'],
)
user.groups = serialized.init_data['groups']
user.save()
serialized_user = UserSerializer(user)
return Response(serialized_user.data, status=status.HTTP_201_CREATED, headers={"Access-Control-Allow-Origin": "http://127.0.0.1:8000/"})
else:
return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST, headers={"Access-Control-Allow-Origin": "http://127.0.0.1:8000/"})
我的问题是:如何在 UserViewSet 中指定 create 我不需要凭据?还是指定自定义身份验证方法?我不想更改整个视图集的身份验证/权限类。
谢谢, 阿迪
编辑 澄清:应允许未注册用户发布注册数据,不应允许其他任何内容。经过身份验证的用户可以获取用户列表并更新他们自己的个人资料……这是默认行为。这就是为什么 AllowAny 不是一个选项的原因。在我看来,这个合适的地方是 create 函数,但我没有得到我应该覆盖的东西。
【问题讨论】:
标签: python django rest django-rest-framework