首先用户在浏览器输入一个url访问某一个请求
falsk接受用户请求并分析请求url
为这个url找出相应的处理函数
执行函数并生成响应,返回给浏览器
浏览器接受并解析响应,将信息解析在页面当中
url---->request--->函数--->response---->浏览器解析并响应在页面
app.route()接受请求的url之后处理这个url下面的视图函数
一个视图函数可以绑定多个url
动态路由
动态路由可以设置默认值, 添加参数defaults
@app.route('/hello', defaults={'name': 'Owen'})
@app.route('/greet/<name>')
def greet(name):
return '<h1>Hello, %s!</h1>' % name
现在最好把目录切换到flask脚本下面, 之后运行flask run执行程序,现在已经不推荐用app.route来执行程序了
flask会自动寻找app如果你的命名不是APP, 需要在终端输入这是在linux系统下:export FLASK_APP=脚本的名
要是在windows下需要这样设置set FLASK_APP=脚本名
改变默认的5000端口,flask run --port 8100
创建一个.flaskenv文件开发的时候写上
FLASK_ENV=development
flask shell 可以在命令行中调试代码,很有用
flask的配置(app.config)是字典的子类,可以像字典那样添加配置和读取配置
app.config('ADMIN_NAME' ) = 'Owen'
注意配置的名称必须大写。小写的变量是不会读取的。使用update的方法可以一次加载多个值
app.config.update(TESTING = True,
SECRET_KEY='sadfasdf',
)
响应的读取配置和读取字典一样
value = app.config['ADMIN_NAME']
某些扩展需要读取配置来完成初始化操作
所以最好在程序实例化之前就加载配置
为了避免程序的硬编码,而引入了url_for()
url_for()的第一个参数是视图函数的名称, 第二个参数是默认的url变量
只会获取相对的url如果要是想获取full_path需要把_external参数设置为True
把视图函数注册为flask的命令行参数
@app.cli.command()
def hello():
click.echo('Hello, Human!')
在命令行执行flask hello就可以执行此视图函数了
也可以在@app.cli.command('say_hello')
在命令行执行flask say_hello
静态文件和模板的目录形式
hello/
- templates/
- static/
- app.py
一般写项目的时候程序目录结构
在创建程序实例后,使用config对象的from_pyfile()方法即可加
载配置,传入配置模块的文件名作为参数:
app.config.from_pyfile('settings')
在使用多个py脚本的时候app的实例化应该写上项目名
app = Flask('项目名') or Flask(__name__.split('.')[0])