Различия между использованием Resource Model (Tastypie) и единственной функцией Rest-Framework

Прежде всего, я новичок в Python и Django, я пытаюсь понять плюсы и минусы apis по одной функции и apis по ресурсам (Tastypie's ModelResources).

Я работал над проектом Django и все время использовал rest-framework. Тем не менее, я создал каждую функцию для каждого API с сервера. Например, это простая функция регистра, которую я написал с использованием rest-framework:

@api_view(['POST'])
@permission_classes((AllowAny,))
@parser_classes((JSONParser,))
def register(request):
    if request.data is not None:
       try:
           username = request.data['username']
           password = request.data['password']
           user = User.objects.create_user
                            (username=utils.encrypt(username),
                             password=utils.encrypt(password))
           ......

Это еще один пример регистрации с использованием Tastypie's ModelResource:

class RegisterUserResource(ModelResource):
    class Meta:
        allowed_methods = ['post']
        always_return_data = True
        authentication = Authentication()
        authorization = Authorization()
        queryset = User.objects.all()
        resource_name = 'register'

    .......
    def obj_create(self, bundle, **kwargs):
       try:
            username = bundle.data["username"]
            password = bundle.data["password"]

            if User.objects.filter(username=username):
                raise CustomBadRequest(
                    code=status.HTTP_201_CREATED,
                    message="This username is taken"
                )

            # Create object
            bundle.obj = User.objects.create_user(username=username, password=password)
            bundle.obj.save()

            # Create user profile object
            UserInfo.objects.create(user=bundle.obj)
        except KeyError:
            raise CustomBadRequest(
                code="missing_key",
                message="Must provide {missing_key} when creating a user."
            )
        except User.DoesNotExist:
            pass

        return bundle

Пожалуйста, помогите мне понять, в чем различия между этими двумя способами и какой путь лучше. Лично я считаю, что использование ModelResource в Tastypie довольно сложно и иногда трудно контролировать разрешение объекта (я мог ИЗБАВИТЬ любой объект по идентификатору, даже если этот объект не был создан мной - я пытался найти эту информацию в документации Tastypie, но не нашел ничего связанные с)..

0 ответов

Другие вопросы по тегам