2020/03/12 04-分页实现和校验函数抽象

getall如果实现,是拿到所有的

在这里插入图片描述
在这里插入图片描述
还是从post上拿

在这里插入图片描述
下面要做的事情就是迭代了,post表里是没有content,而要的所有数据是在post表中,比如说title,author,postdate,文章列表页,一把不显示文章内容,只显示列表,甚至只要title就够了,实际上还需要有title对应的postid,这两个结合在一起才能形成一个链接,title给人看,id是给编程用的

我们查数据需要for循环,遍历一个个返回去,这一行行需要一个顺序,查的数据,在数据库返回之前,一般是按照id顺序查回来的,我们查的数据应该按照时间排一下

默认升序
在这里插入图片描述
降序在名称前面加-号
在这里插入图片描述
用id倒排比较好
在这里插入图片描述
改成id就行了
在这里插入图片描述
能拿到数据后,需要遍历,然后加到列表里,放到json的response里去,列表推导式

在这里插入图片描述
现在是id过去可以找到对应的文章

在这里插入图片描述
getall给个/就满足了,什么都不要在这里插入图片描述
就拿到了数据,一个列表,里面有一篇文章

在这里插入图片描述
上传几个文章

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在就有4篇文章了

在这里插入图片描述
但是如果文章多了,几万篇就不能这么写,需要limit分页功能,现在防爬虫,都不告诉你有多少页,或者你最多点20页,如果再找不到就是你的关键词错了,不给你查了

这样是可以在url后加查询字符串了
在这里插入图片描述
这样是进不来的,没有斜杠
在这里插入图片描述
这里要求post/才能进来

在这里插入图片描述

先考虑如何分页,查询字符串在get部分,GET是一个多值字典

在这里插入图片描述
查一下
在这里插入图片描述
既然是字典可以用字典的方式来取

在这里插入图片描述
斜杠必须写,因为是我们匹配需要的路径,?查询字符串提交到了getall函数就可以提取里面内容,page=1
在这里插入图片描述
提交一下
在这里插入图片描述
得到数字1
在这里插入图片描述
写个100

在这里插入图片描述
在这里插入图片描述
拿到一些信息就可以开始进行操作
在这里插入图片描述
这个信息现在这么操作,打印一下类型,看看该如何操作
在这里插入图片描述
send一下

在这里插入图片描述
100是str类型
在这里插入图片描述
如果强制转换数字,但是用户万一写的是字符串,就出错了,一般这种情况,其他网站都是返回首页
在这里插入图片描述
试试用try,如果转失败就还是1
在这里插入图片描述
-100查询
在这里插入图片描述
但是是-100在这里插入图片描述
转成功了还不行,还应该大于0,如果出错了利用异常就强行改成1,转换成功如果是负数就转成1
在这里插入图片描述
这里就拿到了page页的一些信息,还有一个信息需要知道,现在不知道要显示多少个,现在光拿到页码,不知道拿到第二页,数据从哪里开始
在这里插入图片描述
所以需要定义一个pagesize问题,size一般=20,一般都做分页控制,可以写死,也可以像邮箱一样让用户选择一页显示多少个,size这个值一般是有上限的,而且在服务器端一定要验证,防止爬虫给你设定个50000,直接一下次爬取50000个数据
**假设这个size值也来自客户端,大于0and 小于101 ,1到100是合适的,否则就直接20 **

在这里插入图片描述
先解决分页的问题,size如果是2该如何表示
在这里插入图片描述
先把起点算出来,再偏移几个
在这里插入图片描述
索引这么算,这个公式要记住,基本上分页都这么用,虽然django提供了分类的页,但是不好用
在这里插入图片描述
0到2,对的
在这里插入图片描述

在这里插入图片描述
12来了,倒排的,我们是按照时间插入的,实际上id倒排就是时间倒排,id倒排效率更高
在这里插入图片描述
分页信息需要做出来,需要4个值,总行数count,总页数pages,当前页page,每页多少个size
在这里插入图片描述

在这里插入图片描述
这里这么写相当于把总行数切片了,所以不能这么写在这里插入图片描述
在之前还需要用一次
在这里插入图片描述
第一页page=1,size是2,总行数是4,4/count=总页数=2
在这里插入图片描述
用向上取整的方式ceil,天花板,总数目/size=总页数
在这里插入图片描述

在这里插入图片描述
**size改成1,总页数就是4 **在这里插入图片描述
一般来讲,包括分页的控件,前端的写页面的时候上一页下一页,要的数据也是这4条数据中的几条而已

在这里插入图片描述
在使用过程中注意要不要排序,第二是否把所有数据都给它

百度的这个每页就有一个PN,pagenumber,这些必须要暴露,不想暴露要么里面通过脚本在传,封装在一个body里,就是不想暴露在url链接里去
在这里插入图片描述
一般size不会让你随便调整
在这里插入图片描述
在这里插入图片描述
这里是否可以抽象成一个单独的验证函数,因为新加的参数也是这样来判断
在这里插入图片描述
这个函数需要一个数据源
在这里插入图片描述
这里要加个名字,现在就比较接近了
在这里插入图片描述
需要有个默认值,但是这个默认值不一定是int,可能代表一种范围,也就是string,所以还需要提供转换的功能
在这里插入图片描述
加一个转换类型convert_func
在这里插入图片描述
size也可以替换了,现在替换了就剩这部分需要修改
在这里插入图片描述
如果想象成单行函数
在这里插入图片描述
转换成lambda,需要拿到两个参,做比较,才能选择默认值
在这里插入图片描述
这个y就等价于default

在这里插入图片描述
函数就是来做复用的,高阶函数的提取方式,作为参数传入
在这里插入图片描述
以后逻辑就放外面去,有类似更复杂的就可以用这种方式提取
在这里插入图片描述
这是一个高阶函数抽象的练习
在这里插入图片描述
如果不抽象,这里查询字符串多的话,会写成一排,看似很整齐,别人可能会要求抽象一下
在这里插入图片描述
包括js中高阶函数用的很多,js也可以这么写,用传统的方式try if解决问题,想提高就需要抽象
在这里插入图片描述
凡是提交验证都用得到,可以当工具类来使用
在这里插入图片描述
在这里插入图片描述
就算暴露给客户端,也要控制范围不允许超界
在这里插入图片描述
分页可以用size来分,切片可以主键页可以字段名
在这里插入图片描述
在这里插入图片描述
分页需要一些数据,得到之后就进行查询
在这里插入图片描述
查询完可以给一个总数,但是也可以不用,因为总数有了,别人就知道该爬多少了,所以现在一般不给总数,爬到一定程度不让你爬了在这里插入图片描述
把数据凑好改回去,抽象出来一个校验函数,这个抽象函数,可以放到工具类,到时候直接调用即可

在这里插入图片描述
在这里插入图片描述
如果现在需要解决一个修改问题,先查出来给人一个界面,把数据修改好后,id是不变的,id可以放在url地址栏里?id=xxx,但是这样太直接了,最简单应该加一个input hidden,看不见的,把id写进去,外面是一个form表单,里面的控件需要name属性,否则提交了收不到

在这里插入图片描述
但是可以拦截,按钮需要onclick,一onclick,就会去遍历dom树中,找三个值,凑到一个json里去,构造json对象,通过ajax异步提交,将这种数据直接发到服务器端去了,就绕过了原来的form表单提交
在这里插入图片描述
post参数提交是form表单提交
在这里插入图片描述
我们是在body里用row json方式提交,但是我们需要用js来做
在这里插入图片描述
对方如何区分你是post,post是insert,put是modify
在这里插入图片描述
但是url映射里不能配置方法,只能配置路径到view函数的映射,所以只能后面是/pub,如果是修改那就只能url是/modify
函数名modi,方法还是用post

在这里插入图片描述
当然页面里还有钩,打上就是删除,后台列表页,每个用户只能看到自己的文字,也需要加过滤用户id

在这里插入图片描述
到了管理页面,后台肯定有多选框,还有按钮delete,也是把你填进去的id记住 了,无非就是filter加谁,匹配哪个字段

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值