django里实现分页

本文介绍了如何使用C# WPF客户端通过MVVM结构与Django服务器进行交互,实现数据的分页获取。作者首先创建查询小类,接着利用System.Net.WebClient向Django发送JSON请求,服务器接收请求后处理查询并返回JSON数据,最后客户端使用JObject解析数据生成所需对象组。这种客户端访问RESTful服务器的方式提高了代码复用性和可能的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c#的客户端,向django 获取数据,并分页

最近忙完手头的工作,刚好有时间,便尝试捣鼓C# 上面wpf的开发,并用Prism来实现MVVM的结构。想想自己已经接近40,却还在捣鼓代码,有时候觉得这个似乎不太真实。可是软件开发一直是自己的业余爱好,再加上自己的工厂里一直都要使用,于是还是把业余时间投入了进去,不管这些时间值得与否,我还是想在优快云上面和朋友们分享一下。

就是实现标题里这个简单的目的
在这里插入图片描述

第一步,建立一个查询小类

        class QueryRoll {
           public string  type;
           public string pkgby;
           public string status;
           public int page_size=10;
           public int which_page =1;

        }

第二步 把查询对象发送到服务器
我使用了System.Net.WebClient这个工具,向我的Django数据库发送信息。

第三步 服务器接收到客户端发过来的json请求,然后通过设定好的查询条件,按照固定的json格式,把信息以json的格式反馈给客户端。

第四步,客户端收到json格式的数据,用JObject解析后,按照字段取出JToken,然后遍历,并生成我们想要的对象组。

以前我觉得用ADO.net会更方便,我们客户端直接连接数据库就行了,为什么要这么繁琐呢?用现在客户端访问Restful服务器的方式,我觉得一来服务器代码设计一次,所有客户端,无论手机,电脑,pad都可以通用,二来速度似乎比直接连接数据库更快,不知道是否我的错觉。

以下是客户端的代码

        public  List<Roll> fetchRolls(int page) {
            List<Roll> rolls=new List<Roll>();

            //访问服务器
            string url = gServerUrl + "/roll/list/";
            var json_data = string.Empty;

            using (var webclinet = new System.Net.WebClient()) {
                //设置编码
                webclinet.Encoding = System.Text.Encoding.UTF8;
                //设置数据发送方式
                webclinet.Headers.Add(HttpRequestHeader.ContentType, "application/json");

                try
                {
                    //创建查询对象
                    QueryRoll qo = new QueryRoll();
                    qo.packageBy = 100;
                    qo.page_size = 10;
                    qo.which_page = page;
                    json_data = webclinet.UploadString(url, "POST", JsonConvert.SerializeObject(qo));
                    Debug.WriteLine(json_data)
                    JObject rollJson = JObject.Parse(json_data);
                    int count = Convert.ToInt32(rollJson["count"]);
                    int num_pages = Convert.ToInt32(rollJson["num_pages"]);
                    if (count > 0)
                    {
                        IList<JToken> rollTokens = rollJson["data"]["results"].Children().ToList();
                        foreach(JToken rt in rollTokens)
                        {
                            Roll r = rt.ToObject<Roll>();
                            rolls.Add(r);
                        }
                    }
                }
                catch (System.Net.WebException)
                {

                }

            }

            return rolls;
        }

以下是Django服务器的主要代码


@api_view(['GET','POST','DELETE'])
def list_rolls(request):
    if request.method=='POST':
        logging.debug(request.body)
        query_str=json.loads(request.body)
        rolls_all=OdmRoll.objects.filter(packageby__exact=100)

        page_size=int(query_str['page_size'])
        which_page=int(query_str['which_page'])

        pages=Paginator(rolls_all,10,page_size)

        try:
            rolls=pages.page(which_page)
        except EmptyPage:
            rolls=pages.page(1) #如果which_page超过总页数,直接返回第一页
        rolls_serialized=RollSerializer(rolls,many=True)
        print(rolls_serialized.data)
        return JsonResponse({'message':'获取成功','count':pages.count,'num_pages':pages.num_pages,'data':{'results':rolls_serialized.data}},status=status.HTTP_200_OK)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值