Flask

记录学习 Flask 过程的笔记

Http方法

Http有多个访问URL的方法,默认情况下,路由只回应GET请求,但是通过app.route装饰器传递methods参数可以改变这个性为:

1
2
@app.route('/login', method=['GET', 'POST'])
@app.route('/j/item/<id>', methods=['DELETE', '[POST'])

如果存在GET,那么也会自动地添加HEAD方法,无需干预。它会确保遵照HTTP RFC(描述HTTP协议的文档)处理HEAD请求,所以你完全可以忽略这部分的HTTP规范。从Flask 6.0起,它也实现了OPTIONS的自动处理
下面简要介绍HTTP方法和使用场景

  • GET:获取资源,GET操作应该是幂等的
  • HEAD:想要获取信息,但是只关心消息头。应用应该像处理GET请求一样来处理它,但是不返回实际内容
  • POST:创建一个新的资源
  • PUT:完整的替换资源或者创建资源。PUT操作虽然有副作用,但应该是幂等的
  • OPTIONS:获取资源支持的所有HTTP方法
  • PATCH:局部更新,修改某个已有的资源
    (幂等:表示在相同的数据和参数下,执行一次或多次产生的效果是一样的)

使用url_for生成路径代替绝对路径

不要在模板中写死静态文件路径,应该用url_for生成路径

1
url_for('static', filename='style.css')

生成的路径就是’/static/style.css’
当然我们也可以定制静态文件的真实目录:

1
app = Flask(__name__, static_folder='/tmp')

那么访问’https://localhost:9000/static/style.css',也就是访问/tmp/style.css这个文件

Flask-Migrate

在开发过程中我们经常会修改到model,此时一般的操作是先删除表,再使用Flask-SQLAlchemy的create_all()重新建表,数据就会全部丢失了
Flask-Migrate是数据库迁移框架,就像代码版本控制工具会监控代码改动一样,一个数据库迁移框架能跟踪数据库表的变化,并且能把新的改动应用到旧的表中

  • 安装
    1
    pip install flask-migrate
  • 使用Flask-Script命令行实现Flask-Migrate
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # manage.py
    # 官方示例
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_script import Manager
    from flask_migrate import Migrate, MigrateCommand

    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

    db = SQLAlchemy(app)
    migrate = Migrate(app, db)

    manager = Manager(app)
    manager.add_command('db', MigrateCommand)

    class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))

    if __name__ == '__main__':
    manager.run()
  • 运行
    • 初始化migrate本地仓库
      1
      python manage.py db init
    • 开始迁移
      1
      python manage.py db migrate
    • 更新数据库
      1
      python manage.py db upgrade
    • 获取帮助信息
      1
      python manage.py db --help

Requirements

应用应该包含一个requirements.txt,它记录了有着准确版本号的所有包依赖,能在其它环境下使用该文件快速安装所需要的依赖

  • 自动生成requirements.txt文件,命令行输入以下命令

    1
    pip freeze >requirements.txt
  • 在新环境中,如果要快速恢复需要的依赖,只需执行以下命令即可

    1
    pip install -r requirements.txt

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×