第一次启动Flask
- 创建一个项目
cd ~/Desktop/demos/hello
- 创建文件
hello/app.py
from flask import Flask
app = Flask(__name__) # 创建程序实例 ”__name__“:是模块或包的名称,例如现在是 `app`
@app.route("/")
def hello():
return "<h1>Hello Flask!</h1>"
注册路由
在一个web应用里,客户端和服务器上的Flask程序得交互可以简单的概括为一下几步:
- 用户在浏览器输入URL访问某个资源
- Flask接收用户请求并分析请求得URL
- 为这个URL找到对应得处理函数
- 执行函数并生成响应,返回给浏览器
- 浏览器接收并解析响应,将信息显示在页面中
注册路由:只需为函数附加 app.route() 装饰器,并传入URL规则作为参数,就可以让URL与函数建立关联。
- 路由负责管理URL和函数之间的映射
- 这个函数被称为 视图函数(view function)
route()装饰器得第一个参数是URL规则,用字符串表示,必须以(/)开始,并且是相对路径(不包含域名)。
视图绑定多个URL
@app.route('/hi')
@app.route('/hello')
def say_hello():
return "<h1>Hello, Flask!</h1>"
动态URL
@app.route('/greet/<name>')
def greet(name):
return "<h1>Hello, %s!</h1>" % name
- 设置动态url参数的默认值
defaults = {'name':'programmer'}
@app.route('/greet', defaults = {'name':'programmer'})
@app.route('/greet/<name>')
def greet(name):
return "<h1>Hello, %s!</h1>" % name
------------------------------
上面与下面相同
@app.route('/greet')
@app.route('/greet/<name>')
def greet(name = 'projrammer'):
return "<h1>Hello, %s!</h1>" % name
启动开发服务器
基本运行方式
$ flask run
$ pipenv run flask run # 虚拟环境运行flask服务
$ python -m flask run # python环境启动服务器
默认监听端口
http://127.0.0.1:5000
http://localhost:5000
自动发现程序实例
flask会从当前目录寻找app.py / wsgi.py 模块,并从中寻找名为app或者application得程序实例。
要想修改这一规则,则需要添加环境变量:↓
export FLASK_APP = hello # linux or macos
set FLASK_APP = hello # windows
使用 python-dontenv 管理环境变量
当安装了python-dotenv时,Flask在加载环境变量的优先级是:手动设置的环境变量>.env中设置的环境变量>.flaskenv设置的环境变量。
pipenv install python-dotenv
在项目得根目录下创建 .env / .flaskenv 文件。 - .env : 存储Flask相关的公开环境变量 - re: FLASK_APP - .flaskenv :存储包含敏感信息得环境变量 - re:Email服务器得账户名和密码
更多启动选项
- 指定host
flask run --host={指定ip}
# 这个指定ip如果填写为本机得ip地址,那么 在同一局域网下,任意设备都可以访问
- 指定port
flask run --port=8888
# Flask提供的Web服务默认是 5000端口,可以启动一个没人用的端口来指定
指定运行环境
- 设置开发环境
- 在开发环境下,调试模式(Debug Mode)会被自动开启,并且会激活 Werkzeug内置得调试器和重载器
.flaskenv 文件加入如下内容:
FLASK_ENV=development
重载器
- 调试模式会自带一个重载器
- 安装 Watchdog库,来检测文件变动
pipenv install watchdog --deveeeeeeeeee
项目配置
加载配置
app.config['ADMIN_NAME'] = 'Peter'
加载多个值
app.config.update(
TESTING=True,
SECRET_KEY='_HJh123ljflkew'
)
URL与端点
url_for() 第一个参数为端点(endpoint)值
@app.route('/')
def index():
return "hello flask"
url_for('index')
@app.route('/hello/<name>')
def greet(name):
return "hello %s" % name
url_for('greet', name = "Wuhan")
Flask命令
@app.cli.command()
@app.cli.command()
def hello():
click.echo("Hello , Human!")
---------
$ flask hello
Hello , Human!
模板与静态文件
一个正常得flask文件得正常结构
hello/
- templates/
- static/
- app.py
templates: 模板文件存放处(html文件等)static: 静态文件存放处(图片等)