行文逻辑
先列出5大蓝图里的视图函数,通过和前端的显示,看出哪些之间相似,可以复用,这是从深层角度挖掘项目的功能模块,从而记忆更深刻。
index
先写出视图函数show_index(),news_list(),favicon(),handler_error()。
news
followed_user(),news_detail(),news_collect(),news_comment(),comment_like()
profile
user_index(),base_info(),pic_info(),pass_info(),collection(),news_release(),news_list(),user_follow()。
profile里的collection()和user_follow()属于逻辑相似,均为判断是否为get请求,然后获取参数,参数校验,参数判空,然后根据参数去数据库查询对象,把对象转为字典对象,渲染给页面,返回响应。(提示:这和admin中的视图函数高度重合)
admin
admin_login(),admin_index(),news_review(),news_review_detail(),news_edit(),news_edit_detail(),news_category(),add_category(),user_count(),user_list()
其中news_review_detail(),news_edit_detail()都可以用profile中的news_release()。news_review(),news_edit(),user_list()可以用profile中的news_list()。
复用第一步
秉持着先知道什么就先写好什么的原则,我把上面归纳出来的可复用的模块写出各自的逻辑,先说profile里的collection()和user_follow(),你也可以看看两者代码是不是高度相似:
1 |
|
1 |
|
逻辑呢,在profile标题下里也说了,获取参数,参数类型转换,分页查询对象,获取分页对象属性(总页数,当前页,当前页对象列表),将对象列表转为字典列表,拼接数据,渲染给html模板。
再看profile里的news_release()
1 |
|
我在admin标题下说admin里的news_review_detail(),news_edit_detail()视图函数与profile里的news_release()类似。admin下的新闻审核,即news_review_detail()不能修改,只能点击审核通过或者不通过+reason,所以post请求只涉及修改news.status。来看看实际代码吧。
1 |
|
1 |
|
它们的功能是分为get和post请求,get就是填信息,post就是把表单信息提交,并为相应对象设置提交表单里的属性值。逻辑是
1.判断请求方式,如果是GET
2.获取新闻编号
3.通过新闻编号查询新闻对象,并判断新闻对象是否存在
4.携带新闻数据和分类数据,渲染页面
5.如果是POST请求,获取参数
6.参数校验,为空校验
7.根据新闻的编号取出新闻对象
8.上传新闻图片
9.设置新闻对象的属性
10.返回响应
就是查询对象不同,思路是一整套的。