flask框架

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)

配置参数的使用方式:

  1. 使用配置文件 app.config.from_pyfile('config.cfg')
  2. 使用对象 app.config.from_object(Config)
  3. 直接操作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')

上下文对象

请求上下文:
requestsession都属于请求上下文对象
应用上下文:
current_appg都属于应用上下文对象

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}}

自定义过滤器:

  1. 定义过滤器函数,注册过滤器
  2. 装饰器的方法 @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()
flask框架_第1张图片
查询执行器
flask框架_第2张图片
查询过滤

数据库迁移

pip install flask-migrate
pip install flask-script

配置

manager = Manager(app)
Migrate(app,db)
manager.add_command('db',MigrateCommand)
if __name__=='__main__':
   manager.run()

命令:

  1. 初始化执行 python main.py db init
  2. 生成迁移文件 python main.py db migrate -m '版本信息'
  3. 执行迁移更新数据库 python main.py db upgrade
  4. 迁移历史 python main.py db history
  5. 回滚迁移 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

你可能感兴趣的:(flask框架)