Flask学习笔记

Flask: web development, one drop at a time

Flask 是一个 Python 实现的 Web 开发微框架。Flask 依赖两个外部库: Jinja2 模板引擎 Werkzeug WSGI 工具集

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

如果使用单模块,必须使用__name__关键字,因为模块的名称会因为它是单独启动还是作为模块导入会不相同,会影响Flask定位模版及静态文件的路径。其中 if __name__ =='__main__': 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。

外部可访问的服务器

如果你运行了这个服务器,你会发现它只能从你自己的计算机上访问,网络中其它任何的地方都不能访问。在调试模式下,用户可以在你的计算机上执行任意 Python 代码。因此,这个行为是默认的。


如果你禁用了 debug 或信任你所在网络的用户,你可以简单修改调用 run() 的方法使你的服务器公开可用,如下:

app.run(host='0.0.0.0')

这会让操作系统监听所有公网 IP。


调试模式

虽然 run() 方法适用于启动本地的开发服务器,但是你每次修改代码后都要手动重启它。这样并不够优雅,而且 Flask 可以做到更好。如果你启用了调试支持,服务器会在代码修改后自动重新载入,并在发生错误时提供一个相当有用的调试器。

app.run(debug=True)

唯一 URL / 重定向行为

若定义了@app.route('/projects/'),那么http://127.0.0.1:5000/projects会被重定向为http://127.0.0.1:5000/projects/

构造 URL

如果 Flask 能匹配 URL,那么 Flask 可以生成它们吗?当然可以。你可以用 url_for()来给指定的函数构造 URL。它接受函数名作为第一个参数,也接受对应 URL 规则的变量部分的命名参数。未知变量部分会添加到 URL 末尾作为查询参数。这里有一些例子:

from flask import Flask,url_for
app = Flask(__name__)

@app.route('/')
def index(): pass

@app.route('/login')
def login(): pass

@app.route('/user/<username>')
def profile(username):pass

with app.test_request_context():
	print (url_for('index'))
	print (url_for('login'))
	print (url_for('login', next='/'))
	print (url_for('profile', username='John Doe'))

输出:

/
/login
/login?next=%2F
/user/John%20Doe

(这里也用到了 test_request_context() 方法,下面会解释。即使我们正在通过 Python 的 shell 进行交互,它依然会告诉 Flask 要表现为正在处理一个请求。请看下面的解释。 环境局部变量 )

为什么你要构建 URL 而非在模板中硬编码?这里有三个绝妙的理由:

  1. 反向构建通常比硬编码的描述性更好。更重要的是,它允许你一次性修改 URL, 而不是到处边找边改。
  2. URL 构建会转义特殊字符和 Unicode 数据,免去你很多麻烦。
  3. 如果你的应用不位于 URL 的根路径(比如,在 /myapplication 下,而不是 / ), url_for() 会妥善处理这个问题。


Flask_Migrate的介绍与安装:

  1. 介绍:因为采用`db.create_all`在后期修改字段的时候,不会自动的映射到数据库中,必须删除表,然后重新运行`db.craete_all`才会重新映射,这样不符合我们的需求。因此flask-migrate就是为了解决这个问题,她可以在每次修改模型后,可以将修改的东西映射到数据库中。
  2. 首先进入到你的虚拟环境中,然后使用`pip install flask-migrate`进行安装就可以了。
  3. 使用`flask_migrate`必须借助`flask_scripts`,这个包的`MigrateCommand`中包含了所有和数据库相关的命令。
  4. `flask_migrate`相关的命令:

    * `python manage.py db init`:初始化一个迁移脚本的环境,只需要执行一次。
    * `python manage.py db migrate`:将模型生成迁移文件,只要模型更改了,就需要执行一遍这个命令。
    * `python manage.py db upgrade`:将迁移文件真正的映射到数据库中。每次运行了`migrate`命令后,就记得要运行这个命令。

注意点:需要将你想要映射到数据库中的模型,都要导入到`manage.py`文件中,如果没有导入进去,就不会映射到数据库中。`manage.py`的相关代码:

    ```
    from flask_script import Manager
    from migrate_demo import app
    from flask_migrate import Migrate,MigrateCommand
    from exts import db
    from models import Article

    # init
    # migrate
    # upgrade
    # 模型  ->  迁移文件  ->  表

    manager = Manager(app)

    # 1. 要使用flask_migrate,必须绑定app和db
    migrate = Migrate(app,db)

    # 2. 把MigrateCommand命令添加到manager中
    manager.add_command('db',MigrateCommand)

    if __name__ == '__main__':
        manager.run()
    ```


最好为每个项目创建独立的虚拟环境,这样发布的时候可以明确指出项目所需依赖包,也便于自己理解所需的依赖包

  1. 利用命令行到虚拟环境的目录下激活虚拟环境D:\Projects\TestDemo\migrateDemo\flask_migrateenv\Scripts\  activate
  2. 进入到项目目录 cd D:\Projects\TestDemo\migrateDemo
  3. 输入迁移数据库命令 manage.py db init

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值