【问题标题】:tastypie check for missing fields in json美味派检查 json 中的缺失字段
【发布时间】:2015-07-28 18:11:02
【问题描述】:

我正在使用tastepie 创建一个api。代码如下。我已经使用 ipdb 检查了代码。

class UserProfileResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'userprofiles'
        excludes = ['password', 'is_active', 'is_staff', 'is_superuser']
        filtering = {
            'username': ALL,
        }
class UserResource(ModelResource):
    user = fields.ForeignKey(UserProfileResource, 'user', full=True)

    class Meta:
        queryset = User.objects.all()
        resource_name = 'users'

        list_allowed_methods = ['get','post']
        allowed_methods = ['get', 'put', 'patch', 'delete']
        authentication = ApiKeyAuthentication()
        serializer = Serializer(formats=['json', 'jsonp', 'xml', 'yaml', 'html', 'plist'])
    def post_list(self, request, **kwargs):
        print 'post list method'
        mandatory_fields = ['username', 'email', 'first_name', 'last_name', 'address', 'city', 'pin']
        fields_apicall = request.GET.keys()
        #import ipdb;ipdb.set_trace();
        print request.POST
        if set(mandatory_fields).issubset(fields_apicall):
            print request.GET.keys()
            create_object = True
        else:
            print 'NO'
            err_dict = { 'error':'Mandatory Fields Missing.' }
            return HttpResponse(json.dumps(err_dict))

    def obj_create(self, bundle, **kwargs):
        print 'obj_create() '
        mandatory_fields = ['username', 'email', 'first_name', 'last_name', 'address', 'city', 'pin']
        fields_apicall =  bundle.data.keys()
        # import ipdb;ipdb.set_trace();
        if set(mandatory_fields).issubset(fields_apicall):
            bundle.obj = self._meta.object_class()
        else:
            err_dict = { 'error':'Mandatory Fields Missing.' }
            return HttpResponse(json.dumps(err_dict))

我想创建嵌套的用户对象,即用户对象和用户配置文件。为此,我必须确保所有字段都存在于json 中。我尝试覆盖 hydrate()、dehydrate() 和 post_list() 方法。其中只有post_list() 在发布请求中被调用。

我可以通过覆盖post_list() 方法来检查request json 中的fields,但这是检查缺失字段的好方法吗?我已经用谷歌搜索并浏览了许多 SO 帖子,但我没有发现任何帖子提到要覆盖 post_list() 以检查缺少的字段,其中一些人说要覆盖 hydrate()。还有必要重写obj_create() 方法来使用tastepie 创建对象吗?

【问题讨论】:

    标签: django field tastypie missing-data


    【解决方案1】:

    obj_create() 似乎是最好的地方。像这样的东西应该可以工作:

    def obj_create(self, bundle, **kwargs):
        mandatory_fields = ['username', 'email', 'first_name', 'last_name', 'address', 'city', 'pin']
        for field_name, field_object in self.fields.items():
            if field_name not in mandatory_fields:
                err_dict = { 'error':'Mandatory Fields Missing.' }
                return HttpResponse(json.dumps(err_dict))
         super(SomeResource, self).obj_create(self, bundle, **kwargs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2012-10-30
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多