flask应用对象初始化
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello flask'
if __name__=='__main__':
app.run(host="0.0.0.0",port=5000,debug=True)
配置参数的使用方式:
- 使用配置文件
app.config.from_pyfile('config.cfg')
- 使用对象
app.config.from_object(Config)
- 直接操作config字典对象
app.config['DEBUG']=True
路由
@app.route('/',methods=['GET'])
def index():
print(app.url_map)
@app.route('/goods/')
def goods(good_id):
pass
跳转:redirect(url_for('index'))
定义转换器:
class RegexConverter(BaseConverter):
pass
app.url_map.converters['re'] = RegexConverter
@app.route("/send/")
def send_sms(mobile):
Request
data
:记录请求的数据,并转换为字符串
form
:记录请求中的表单数据 Dect
args
:记录请求中的查询参数
Cookies
:记录请求中的cookie信息
headers
:请求的报文头
method
:请求HTTP方法
url
: 请求的url地址 (string)
files
: 请求上次的文件
get_json()
:会把json格式解析成字典
响应信息
@app.route('/index')
def index():
return 'index page',200,{"Content-Type":"application/json"}
# return jsonify(data)
cookie
resp = make_response('success')
resp.set_cookie('test','python',max_age=3600) #设置cookie, max_age 秒
return resp
# 获取cookie
request.cookies.get('test')
#删除cookie
resp.delete_cookie('test')
上下文对象
请求上下文:
request
和session
都属于请求上下文对象
应用上下文:
current_app
和g
都属于应用上下文对象
g:处理请求时,用于临时存储的对象,每次请求都会重设这个对象;
请求钩子:
before_first_request
: 第一次请求前运行;
before_request
:在每次请求前运行;
afeter_request(response)
如果没有未处理的异常,在请求后运行
teardown_request(response)
在每次请求后有运行
脚本扩展 命令行
pip install Flask-Script
from flask import Flask
form flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
if __name__=='__main__':
manager.run()
模板
模板目录templates
:
from flask import render_template
return render_template('index.html', **data)
模板过滤器:
{{'hello'|trim|upper}}
自定义过滤器:
- 定义过滤器函数,注册过滤器
- 装饰器的方法
@app.template_filter('li2')
def list_step_2(li):
return li[::2]
#注册过滤器
app.add_template_filter(list_step_2,'li2')
模板表单扩展 Flask-WTF
pip install Flask-WTF
flask-wtf文档
WTForms文档
宏的定义和使用
定义:
{% macro input() %}
......
{% endmacro %}
使用:
{{ input() }}
外部使用导入:
{% import 'macro_input.html' as m_input %}
{{ m_input.input() }}
模板继承
{%extends 'base.html' %}
{% block title %}
{% endblock %}
支持include
包含
sqlalchemy数据库
安装pip install flask-sqlalchemy
配置:
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:[email protected]:3306/test3"
#设置每次请求结束后会自动提交数据
app.config['SQLALCHEMY_COMMIT_ON_TERADOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#查询显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
模型类
calss User(db.Model):
"""用户表"""
__tablename__ = 'tb_users' #表名
id = db.Column(db.Integer(11),primary_key=True) #整型的主键,自动为自增主键
name = db.Column(db.String(255),unique=True)
age = db.Column(db.Integer(11))
def __repr__(self):
"""显示对象更直观"""
return "Role Object: name=%s" % self.name
操作数据库
db.drop_all() #清除数据库里的所有数据
db.create_all() #创建所有表
#添加数据
user = User(name='u1',age='12')
db.session.add(user)
# db.session.add_all([user1,user2]) #添加多条数据
db.session.commit()
# 查询操作
users = User.query.all()
one = User.query.first()
u1 = User.query.get(1) #根据主键id获取
user = db.session.query(User).all()
# 数据修改
User.query.filter('name'='u1').update({"name":"python","age":22})
db.session.commit()
# 删除
db.session.delete(user)
db.session.commit()
数据库迁移
pip install flask-migrate
pip install flask-script
配置
manager = Manager(app)
Migrate(app,db)
manager.add_command('db',MigrateCommand)
if __name__=='__main__':
manager.run()
命令:
- 初始化执行
python main.py db init
- 生成迁移文件
python main.py db migrate -m '版本信息'
- 执行迁移更新数据库
python main.py db upgrade
- 迁移历史
python main.py db history
- 回滚迁移
python main downgrade ee60329094
蓝图
创建蓝图
auth.py
from flask import Blueprint
bp = Blueprint('auth',__name__)
注册蓝图
from . import auth
app.register_blueprint(auth.bp,url_prefix='/auth')
以目录形式创建蓝图,在__init__.py
文件创建蓝图
flask 部署
Gunicorn
gunicorn -w 4 -b 127.0.0.1:5000 --access-logfile './logs/error.log' main:app
部署Gunicorn