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加谁,匹配哪个字段