【Flask开发】嘿马文学web完整flask项目第6篇:设置日志的记录等级,创建日志记录器,指明日志保存的路径、每个日志文件的

举报
程序员一诺python 发表于 2025/08/10 20:01:45 2025/08/10
【摘要】 1. 内容 2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 2.用户认证 2.1微信平台 Json Web Token(JWT) 定义路由,书架管理--添加书籍 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目部署uWSGI 配置 启动

教程全知识点简介:1. 内容 2. 目标 1.1产品与开发 1.2环境配置 1.3 运行方式 1.4目录说明 2.用户认证 2.1微信平台 Json Web Token(JWT) 定义路由,书架管理--添加书籍 3.书架 4.1分类列表 5.搜索 5.3搜索-精准&高匹配&推荐 6.小说 6.4推荐-同类热门推荐 7.浏览记录 8.1配置-阅读偏好 8.配置 9.1项目部署uWSGI 配置 启动 9.部署 10.1异常和日志 10.补充 10.2 flask-restful 1.项目目录实现 2.数据库的设计 3.数据库迁移: 1.JWT:json web token 2.jwt工具的封装 4.用户权限校验 5.登录验证装饰器 1.书架列表 2.书架管理 3.最后阅读 2.分类书籍列表 3.热门搜索 7.3小说-详情 2.小说目录 2.阅读偏好 3.阅读设置

👉👉👉   https://gitee.com/yinuo112/Backend/blob/master/Flask/嘿马文学web完整flask项目/note.md

6.小说

  • 小说-目录

  • 小说-阅读

  • 小说-详情

6.4推荐-同类热门推荐

  • 在applet_app/recommend.py文件中实现业务。

1-1 推荐-同类热门推荐接口设计

  • 接口名称:推荐-同类热门推荐
  • 接口路径:/recommended/hots/categoryID
  • 请求方法:GET
  • 请求参数:
参数名称 是否必须 参数位置 备注
category_id True URL固定参数 分类id
  • 返回数据:
[
    {
        "author": "",
        "categoryID": 1,
        "categoryName": null,
        "id": 3,
        "imgURL": "
        "introduction": "",
        "state": 1,
        "title": "嫁入豪门成宠妻"
    },
   ...
]

1-2 推荐-同类热门推荐的基本业务:

  • 根据分类id查询数据库书籍大分类表
  • 如果存在大分类数据

  • 遍历查询结果的大分类数据,使用关系引用,获取二级分类数据

  • 查询数据库书籍表,根据书籍分类id,过滤分类书籍数据,取4条
  • 遍历查询结果,添加数据

  • 否则,查询数据库书籍表,默认返回4条数据。

1-3 代码实现

1、定义recommend蓝图

from flask import Blueprint

bp = Blueprint('recommend', __name__)

2、定义视图

@bp.route('/hots/<int:cate_id>')
def hot_books(cate_id):
    """
    推荐-同类热门推荐
    推荐返回 4 条
    :param cate_id:
    :return:
    """
    big_cate = BookBigCategory.query.get(cate_id)
    books = []
    if big_cate:
        second_ids = [i.cate_id for i in big_cate.second_cates]
        o_books = Book.query.filter(Book.cate_id.in_(second_ids)).limit(4)
        for item in o_books:
            books.append({
            'id': item.book_id,
            'title': item.book_name,
            'introduction': item.intro,
            'author': item.author_name,
            'state': item.status,
            'categoryID': item.cate_id,
            'categoryName': item.cate_name,
            'imgURL': ' item.cover)
        })
    else:
        o_books = Book.query.limit(4)
        for item in o_books:
            books.append({
            'id': item.book_id,
            'title': item.book_name,
            'introduction': item.intro,
            'author': item.author_name,
            'state': item.status,
            'categoryID': item.cate_id,
            'categoryName': item.cate_name,
            'imgURL': ' item.cover)
        })
    return jsonify(books)

3、使用postman测试接口:

补充:书架和小说的功能代码实现以后,可以在用户登录代码补充逻辑,默认添加书架书籍的操作。

在user.py文件中,定义函数,在用户登录后,默认调用。

def _add_book_shelf(user_id, sex):
    """书架增加默认书籍"""
    books = Book.query.filter(Book.showed == 1).all()
    choice_books = random.sample(books, 5)
    for book in choice_books:
        db.session.add(BookShelf(book_id=book.book_id,
                                 user_id=user_id,
                                 book_name=book.book_name,
                                 cover=book.cover))
    db.session.commit()

6.小说

  • 小说-目录

  • 小说-阅读

  • 小说-详情

7.1我的-浏览记录

  • 在applet_app/my.py文件中实现业务。

1-1 我的-浏览记录接口设计

  • 接口名称:我的-浏览记录
  • 接口路径:/my/historys
  • 请求方法:GET
  • 请求参数:
参数名称 是否必须 参数类型 参数位置 备注
page True int query 当前页数
pagesize True int query 每页数据量,默认10条
  • 返回数据:
{
    "counts": 0,
    "items": [书籍数据],
    "page": 1,
    "pages": 0,
    "pagesize": 10
}

1-2 我的-浏览记录的基本业务

  • 获取参数page、pagesize
  • 查询数据库浏览记录表,根据用户id过滤查询,并进行分页处理
  • 遍历分页数据
  • 返回结果

1-3 代码实现

1、定义my蓝图,使用flask-restful扩展视图类

from flask import Blueprint



# 创建蓝图对象


my_bp = Blueprint('my',__name__,url_prefix='/my')

2、定义视图

# 定义蓝图路由


@login_required
@my_bp.route('/histories')
def my_history():
    # 1.新建my.py文件,用来实现关于浏览记录的功能代码;
    # 2.创建蓝图、定义蓝图、注册蓝图
    # 3.导入登录验证装饰器
    # 4.获取参数,page和pagesize
    page = request.args.get('page',1,int)
    pagesize = request.args.get('pagesize',10,int)
    # 5.查询数据库浏览记录表,根据用户id查询,分页处理
    paginate = BrowseHistory.query.filter_by(user_id=g.user_id).paginate(page,pagesize,False)
    # 6.获取分页后的数据
    history_data = paginate.items
    items = []
    for item in history_data:
        # 使用关系引用book,从浏览记录表中,获取书籍表里的数据。
        items.append({
            'id':item.book.book_id,
            'title':item.book.book_name,
            'author':item.book.author_name,
            'status':item.book.status,
            'imgURL':'),
            'lastTime':item.updated.strftime('%Y-%m-%d %H:%M:%S')
        })
    # 7.转成json,返回数据
    data = {
        'counts':paginate.total,
        'pagesize':pagesize,
        'pages':paginate.pages,
        'page':paginate.page,
        'items':items
    }
    return jsonify(data)

3、使用postman测试接口:

1-4 清除浏览记录

  • 在applet_app/my.py文件的HistoryResource视图类中,定义http请求方法delete。
# 定义路由,实现浏览记录的删除


@login_required
@my_bp.route('/histories',methods=['DELETE'])
def delete_history():
    # 步骤:
    # 1.根据用户id、查询浏览记录表
    history_data = BrowseHistory.query.filter_by(user_id=g.user_id).all()
    # 2.遍历查询结果
    for data in history_data:
        db.session.delete(data)
    # 3.清除数据
    db.session.commit()
    # 4.返回结果
    return jsonify(msg='OK')
    pass

7.浏览记录

  • 我的-浏览记录

8.1配置-阅读偏好

  • 在applet_app/reader_config.py文件中实现业务。

1-1 配置-阅读偏好接口设计

  • 接口名称:配置-阅读偏好
  • 接口路径:/config/preference
  • 请求方法:POST
  • 请求参数:
参数名称 是否必须 参数类型 参数位置 备注
Content-Type True Headers application/json
gender True string body 偏好,男1,女0
  • 返回数据:
{
    msg:"设置成功"
}

1-2 配置-阅读偏好的基本业务:

  • 获取参数gender
  • 校验参数
  • 提取用户id,查询用户数据
  • 保存用户配置,提交数据
  • 返回设置结果

1-3 代码实现

1、定义my蓝图,使用flask-restful扩展视图类

from flask import Blueprint

config_bp = Blueprint('config',__name__)

2、定义视图

[invoke 文档]

# 定义路由,用户阅读偏好设置


@login_required
@config_bp.route("/preference",methods=['POST'])
def preference():
    # 1.获取参数,post请求体中json数据
    gender = request.json.get('gender')
    gender = int(gender)
    # 2.校验参数,性别的范围
    if gender not in [0,1]:
        return jsonify(msg='性别参数错误')
    # 3.查询数据库,用户表,获取用户信息
    # User.query.filter_by(user_id=g.user_id).update({'gender':gender})
    # db.session.commit()
    user = User.query.filter_by(id=g.user_id).first()
    user.gender = gender
    # 4.保存数据、提交数据
    db.session.add(user)
    db.session.commit()
    # 5.返回结果
    return jsonify(msg='设置成功')

3、使用postman测试接口:

8.2配置-阅读器设置

  • 在applet_app/reader_config.py文件中实现业务。

1-1 配置-阅读器设置接口设计

  • 接口名称:配置-阅读器设置
  • 接口路径:/config/reader
  • 请求方法:POST
  • 请求参数:
参数名称 是否必须 参数类型 参数位置 备注
Content-Type True headers application/json
brightness True int body 10-100亮度
font_size True string body 字号
background True string body B1 ~ B6 内置背景
turn True string body T1 仿真 T2 平滑 T3 无 翻页模式
  • 返回数据:
{
    "msg": "设置成功"
}

1-2 配置-阅读器设置的基本业务:

  • 获取参数brightness、fontSize、background、turn
  • 根据用户id查询用户信息
  • 保存设置信息,提交数据
  • 返回结果

1-3 代码实现

1、定义my蓝图,使用flask-restful扩展视图类

[Psycopg2 文档]

from flask import Blueprint
from flask_restful import Api, Resource, inputs

bp = Blueprint('my', __name__)

api = Api(bp)

2、定义视图 ```python @bp.route('/reader', methods=['POST']) @login_required def reader(): """ 设置阅读器的配置 :return: """ brightness = request.json.get('brightness') fontSize = request.json.get('fontSize') background = request.json.get('background') turn = request.json.get('turn')

user = User.query.get(g.user_id)
if brightness:
    user.bright
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。