新经资讯是一个包含新闻首页,新闻详情,用户中心和后台管理等模块的Flask项目
-
项目框架的搭建
- 包含配置信息:mysql,redis,session等
- 工厂函数产出多种配置的app,数据库对象db,redis_store等
- 日志的记录
- 第三方库:云通讯,七牛云
- 设置的常量,自定义状态码,commons,models等
- flask_script,flask_migrate等
-
根据需求分析E-R图,构建模型类

-
新闻首页和详情页模块
3.1 登录/注册/登出/状态保持(略),以下代码生成图片验证码,在form表单打开时调用
# 后端返回图片验证码使用响应体对象 resp = make_response(image) # 设置内容类型 resp.headers['Content-Type'] = 'image/jpg' return resp
// 生成一个图片验证码的编号,并设置页面中图片验证码img标签的src属性 function generateImageCode() { // 1. 生成一个编号 // 严格一点的使用uuid保证编号唯一, 不是很严谨的情况下,也可以使用时间戳 imageCodeId = generateUUID(); // 2. 拼接验证码地址 var imageCodeUrl = "/passport/image_code?code_id=" + imageCodeId; // 3. 设置页面中图片验证码img标签的src属性 $(".get_pic_code").attr("src", imageCodeUrl)}
// 一个最基础的ajax请求,负责给后端发送数据 var params = { "mobile": mobile, "smscode": smscode, "password": password,} $.ajax({ url:"/passport/register", type: "post", headers: { "X-CSRFToken": getCookie("csrf_token")}, data: JSON.stringify(params), contentType: "application/json", success: function (resp) { if (resp.errno == "0"){ // 刷新当前界面 location.reload() }else { $("#register-password-err").html(resp.errmsg) $("#register-password-err").show() } } } )
3.2 新闻点击排行
-
查询新闻表按照点击次数排序,转化成字典列表后返回数据并渲染模板
news_list = News.query. order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS)
模板展示数据
<ul class="rank_list"> {% for news in data.click_news_list %} <li><span class="{ { loop.index0 | indexClass }}">{ { loop.index }}</span><a href="#">{ { news.title }}</a></li> {% endfor %} </ul>
3.3 新闻分类展示(同租房城区列表,略)
categories = Category.query.all()
3.4 新闻列表实现
-
获取第几页page,每页数量per_page,分类category_id参数
-
检验参数后,查询数据并分页,后端有配合的js代码,详情见下文
filters = [] # 如果分类id不为1,那么添加分类id的过滤 if category_id != "1": filters.append(News.category_id == category_id) paginate = News.query.filter(*filters). order_by(News.create_time.desc()).paginate(page, per_page, False)
-
返回json数据,包括 total_pages,current_page,和新闻数据
3.5 定义一个装饰器判断用户是否登录
def user_login_data(f): #装饰器会改变被装饰函数的端点名称,采用此手段去除影响 @
-