Skip to content

hacker0limbo/watchlist

Repository files navigation

watch list

使用 flask 完成的电影列表项目, 查看 demo

项目截图

demo

项目结构

├── db/             # 数据库文件
├── models/         # 模型
├── reports/        # 测试覆盖率报告
├── routes/         # 路由
├── static/         # 静态目录
├── tests/          # 测试
├── templates/      # 模板
├── app.py          # 入口文件
├── commands.py     # 命令
├── config.py       # 配置
├── context.py      # 上下文管理
└── .flaskenv       # 开发环境变量

项目功能

基本功能包括:

  • 登录登出, 注册新用户
  • 对 watch list 的增删改查
  • 用户修改个人信息包括: 密码更新, 头像上传

用户权限:

  • admin 用户: 用户账号密码均为admin(可在commands.py里面找到), 可以对 watch list 进行完整的增删改查功能
  • 普通用户: 使用页面注册, 或者flask new-user注册的新用户均为普通用户, 只能对 watch list 进行增加, 不得更新和删除

项目运行

安装依赖与初始化

$ git clone https://github.com/hacker0limbo/watchlist
$ cd watchlist
$ pip3 install -r requirements.txt
$ flask initdb
$ flask forge
$ flask run
* Running on http://localhost:8000/

命令行

自定义命令包括: flask initdb, flask forge, flask new-user, flask test, flask coverage 可以通过 flask --help 查看

$ flask --help # 查看所有命令
...
Commands:
  coverage  输出覆盖率测试
  forge     产生 mock 数据
  initdb    初始化数据库表的 schema
  new-user  手动生成新的用户数据
  routes    Show the routes for the app.
  run       Run a development server.
  shell     Run a shell in the app context.
  test      运行测试

flask initdb [--drop]

  • flask initdb: 用于初始化数据库表结构
  • flask initdb --drop: drop 已有的表, 重新生成数据库与表结构

flask forge

  • flask forge: 用于生成 mock 数据, 包括 admin 用户电影信息

flask new-user

  • flask new-user: 用于生成新普通用户
$ flask new-user
...
Username: limboer
Password:
Repeat for confirmation:
Creating new user...
Done.

flask test

  • flask test: 运行 tests/ 目录下的所有测试文件

flask coverage [--html]

  • flask coverage: 在终端输出测试报告
  • flask coverage --html: 在 reports/coverage 目录生成 index.html 的 html 形式报告

参考

项目基本

部署

  • .flaskenv 文件需要修改 FLASK_ENV=production
  • 安装依赖的时候需要加上 --user, 如: pip3 install --user -r requirements.txt
  • 编辑 wsgi 文件的时候需要从项目的wsgi(WSGI configuration file)里面导入, 例如我的为:
    import sys
    
    path = '/home/limboer/watchlist'
    if path not in sys.path:
        sys.path.insert(0, path)
    
    from wsgi import app as application

问题记录