在Django中,ajax通过Restful Api发送变量

时间:2017-07-31 02:21:48

标签: ajax django rest

我是Restful中的新手,我想将一些变量发送到视图集来响应一些过滤数据" GET"现在我已经完成了一些部分,我可以得到所有数据,但是我不了解如何将变量发送到视图集中的特定函数以响应某些过滤数据,例如我创建一个名为" get_ajax_variable()"的新函数。 ,我怎么能把变量发送到  具体功能? 提前欣赏!

这是我的序列化程序

class CompanySerializer(serializers.HyperlinkedModelSerializer):
    Brand = serializers.ReadOnlyField(source='brand_set.all', read_only=True)

    class Meta:
        model = Company
        fields = data_export_setting.Company_form_stand

    def create(self, validated_data): 
        validated_data['owner'] = self.context['request'].user
        return Company.objects.create(**validated_data)

这是我的观点

class CompanyViewSet(viewsets.ModelViewSet):
    queryset = Company.objects.all()
    serializer_class = CompanySerializer

这是我的ajax," showTable(json)"是一个重新加载我的company.html的功能

 <script type="text/javascript">
    $(document).ready(function () {
        $('#ab').click(function () {
            var filter_2 = $("#insert_value").val();//for City
            var filter_1 = $("#insert_value_1").val();// for Company type 
            var filter =  $('#filter').val();//for search 
            $.ajax({
                type: "GET",
                data: {filter:filter, filter_1_value:filter_1,insert_value:insert_value},
                url: "https://horizon-retail-sam-leon-ghibli.c9users.io/restful_api/companyviewset/?format=json",
                cache: false,
                dataType: "json",
                contentType : 'application/json',
                success: function (json) {
                $('#ajax_search').empty();
                    showTable(json);
                    },
                error: function () {
                    alert("false");
                }
            });
        });



    });

3 个答案:

答案 0 :(得分:0)

因为它是一个GET,为什么不把它们作为url params发送?

答案 1 :(得分:0)

我应该作为评论回复,但我没有足够的特权去做。所以请耐心等待。

我假设您使用Django Rest Framework(DRF)给出了您在问题中提供的代码和标记。

基本上,这个url: "https://horizon-retail-sam-leon-ghibli.c9users.io/restful_api/companyviewset/?format=json",允许您将请求和数据一起发送到REST API服务器,即您的设置中的DRF。 django中的urls.py了解您发送的值并将您引导至某个视图/视图集,例如,示例中的CompanyViewSet。

关于视图/视图集如何与序列化器配合使用,您可以查看http://www.django-rest-framework.org/api-guide/serializers/http://www.django-rest-framework.org/tutorial/1-serialization/。这应该足够了。我不确定数据如何从视图/视图集传输到序列化程序。如果有人能解释的话会很棒。但在序列化工具中,您的数据应该在validated_data

在该视图/视图集中,您的数据应该在request.data中用于POST,在GET中,它通常在query.params中,但这实际上取决于您构建ajax调用的方式。

了解POST和GET之间的区别非常重要。你可以简单地谷歌吧。

HTH。

答案 2 :(得分:0)

是的!我已经解决了这个问题,以下是我的步骤  最重要的一步是覆盖Viewset类中的函数get_queryset(self):   在模板中,ajax如下:

   <script type="text/javascript">
    $(document).ready(function () {
        $('#ab').click(function () {
            var filter_2 = $("#insert_value").val();//for City
            var filter_1 = $("#insert_value_1").val();// for Company type 
            var filter =  $('#filter').val();//for search 
            $.ajax({
                type: "GET",
                //data: {filter:filter, filter_1_value:filter_1,insert_value:insert_value},
            url:"You_own_url"+format=json&a="+filter+"&b="+filter_1+"&c="+filter_2,
                cache: false,
                dataType: "json",
                contentType : 'application/json',
                success: function (json) {
                $('#ajax_search').empty();
                    showTable(json);
                    },
                error: function () {
                    alert("false");
                }
            });
        });

在Django的设置中,您应该将REST_FRAMEWORK设置为

  'DEFAULT_FILTER_BACKENDS':('django_filters.rest_framework.DjangoFilterBackend',),
在Django的Url中,您应该按如下方式设置URL:

router.register(r'companysearch',CompanyViewSet)
在视图集中,我没有拉取get_queryset的所有函数,你应该设置如下:

serializer_class = CompanySerializer
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
def get_queryset(self):# how to define the null and None 
    filter_1 = self.request.query_params.get('a')#, None)  
    filter_company_type = self.request.query_params.get('b', None)# company_type
    filter_city_type = self.request.query_params.get('c', None)
   ....

然后你可以正确地得到结果,感谢任何帮助

的人