- 使用的flask版本为0.10.1
- 建立一个最简单的flask程序:
from flask import Flask
app = Flask(__name__)
print('run')
@app.route('/')
def index():
return 'hello flask'
if __name__ == '__main__':
app.run()
- Flask函数接收一个参数__name__,它会指向程序所在的路径
- 装饰器的做用是将路由映射到视图函数 index
- run 方法 启动 WEB 服务器
- 配置初始参数
- flask实例建立时还可传入:
- static_path 静态文件访问路径(不推荐使用,可以使用 static_url_path 代替)
- static_url_path 静态文件访问路径,默认为/static
- static_folder 静态文件存储的文件夹,默认为 static
- template_folder 模板文件存储的文件夹,默认为 templates
- 程序加载配置
- 程序加载运行时的配置,能够配的有debug,数据库连接等,有三种配置方式:
- 从配置对象中加载:
- app.config.from_object() 该方式须要先写一个配置类,类中写入相关配置,并将该类传入
- 从配置文件中加载
- app.config.from_pyfile() 该方式须要先写一个配置文件,文件写入相关配置,并将该文件名(路径)传入
- 从环境变量中加载
- app.config.from_envvar() 不推荐
- RUN方法的参数:
- .run(host="0.0.0.0", port=5000, debug = True) 能够指定运行主机的ip,端口以及debug开关
- 动态路由及传参:
- @app.route('/') 这种直接指定路径的为静态路由
- 动态传参,能够获取到指定url后面携带的信息,并可做为参数进行传递:
@app.route('/user/<user_id>')
def user_info(user_id):
return 'hello %s' % user_id
- 传递的参数还能够指定数据类型,如把
改成
,也能够本身定义转换器,来实现参数的控制
- 指定请求方式:
- @app.route('/',methods=['post']) 不指定时默认为get
- 获取请求参数,获取时需先导入 from flask import request
- get: request.args.get()
- post: request.form.get()
- 上传文件:request.files.get(),获取到文件后使用.save(路径)保存
- 返回json
- 导入jsonify,能够直接使用jsonify(字典)
- 重定向
- 导入redirect,视图函数直接return redirect('要重定向的网址')
- 导入url_for,使用return redirect(url_for('函数名'))反向解析进行重定向,若是函数有参数,直在url_for('函数名',参数=‘xxx’)
- 自定义状态码
- return 要返回的数据,'状态码 说明内容' return 'test code','789 err'
- 请求钩子,经过装饰器形式实现
- 在处理第一个请求前执行:before_first_request,使用时直接@app.before_first_request
- 在每次请求前执行:before_request 使用同上
- 在每次请求后执行:after_request 使用同上
- 每次请求结束以后执行: teardown_request 使用同上
- 状态保持
- cookie 在客户端存储信息使用Cookie
- 设置时导入from flask imoprt Flask,make_response
- 设置:
response = make_response('cookies set success')
response.set_cookie('user_name','jams',max_age=3600) 以键值对的形式设置,max_age设置有效时长
- 获取时使用request
re_cookie = request.cookies.get('user_name')
- session 在服务器端存储信息使用Session Session依赖于Cookie
- 设置时导入from flask import Flask,session
session['se_name'] = 'Liming'
- 获取时直接使用session.get('se_name')
- 设置session时必须先设置secret_key:app.secret_key = 'hjhjhsakjgyhweqoaa'