使用资源模型(Tastypie)和单个Rest-Framework函数之间的差异

时间:2017-08-06 14:34:43

标签: python django django-rest-framework tastypie

首先,我是Python和Django的新手,我试图通过单一函数和apis资源(Tastypie的ModelResources)来理解apis的优点/缺点。

我一直在研究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的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

请帮助我了解这两种方式之间的区别以及哪种方式更好。我个人认为使用Tastypie的ModelResource非常复杂,有时很难控制对象的权限(我可以通过id修改任何对象,即使该对象不是由我创建的 - 我试图在Tastypie的文档中找到这些信息但是没有发现某些东西有关)..

0 个答案:

没有答案