Flask项目新经资讯项目总结

本文总结了一个使用Flask框架开发的新闻项目,包括新闻首页、详情、用户中心和后台管理等模块。项目涉及MySQL、Redis配置,日志记录,第三方库如云通讯、七牛云的集成,以及新闻排行、评论、点赞、收藏等功能的实现。同时涵盖了用户信息修改、关注和取消关注等个人中心功能,以及后台的新闻审核和用户管理。

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


新经资讯是一个包含新闻首页,新闻详情,用户中心和后台管理等模块的Flask项目

  1. 项目框架的搭建

    • 包含配置信息:mysql,redis,session等
    • 工厂函数产出多种配置的app,数据库对象db,redis_store等
    • 日志的记录
    • 第三方库:云通讯,七牛云
    • 设置的常量,自定义状态码,commons,models等
    • flask_script,flask_migrate等
  2. 根据需求分析E-R图,构建模型类

    ![](D:\Users\Liu xiangyu\Desktop\新经资讯E-R图.png)

  3. 新闻首页和详情页模块

    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):
    	#装饰器会改变被装饰函数的端点名称,采用此手段去除影响
        @
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值