繁体   English   中英

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

[英]In Django ,ajax to send the variable by Restful Api

我是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");
                }
            });
        });



    });

既然是GET,为什么不将它们作为url参数发送呢?

我应该以评论的形式答复,但我没有足够的特权来做。 所以,请忍受我。

我假设您使用的是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

在该视图/视图集中,您的数据应位于POST的request.data和GET中,通常位于query.params但这实际上取决于您如何构造ajax调用。

重要的是要了解POST和GET之间的区别。 您可以简单地谷歌它。

HTH。

是的!我已经解决了这个问题,以下是我的步骤中最重要的步骤是覆盖函数get_queryset(self):在模板的Viewset类中,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网址中,您应按以下步骤设置网址:

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)
   ....

那么您可以正确地得到结果,感谢任何帮助的人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM