Различия между использованием 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, но не нашел ничего связанные с)..