Я пытаюсь создать 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, что для создания я не требую учетных данных? Или указать собственный метод проверки подлинности? Я не хочу изменять классы проверки подлинности/разрешения для всего вида.
Спасибо, Adi
ИЗМЕНИТЬ для уточнения: незарегистрированным пользователям должно быть разрешено регистрировать данные POST, и им не разрешается ничего другого. Аутентифицированные пользователи могут получить список пользователей и обновить свой собственный профиль... это поведение по умолчанию. Вот почему AllowAny имеет не вариант. На мой взгляд, подходящим местом для этого является функция create, но я не понимаю, что я должен отменить.