Flask中文文档
点击即可进去
打开pycharm , file new project flask 新建一个flask 项目
创建后
创建虚拟环境
mkvirtualenv flash
选择对应虚拟环境的解释器
你们与我的可能不同,我的虚拟环境 ,专门新建了一个文件夹
安装 flask
pip install flask
换成过呢源,会下载的很快
启动项目
结果
还可接受html 格式 文件
重启项目再刷新,自身不会自动刷新
像Django 一样,在命令行输入参数,
pip install flask-script
把 app 名字改为: manage
-r 自动加载,–threaded 开启多线程
项目拆分
1。 新建项目,app 改为 manage
创建manager 对象
2.新建包 App
把template statis 移到里面
新建 views models.py
把视图函数 放到 views 中,app 从manager 导入
此刻还不能启动
切记 循环导入
manage.py
from App import create_app
app = create_app()
manager = Manager(app=app)
if __name__ == '__main__':
manager.run()
views.py
def init_route(app):
@app.route('/')
def hello_world():
return 'Hello World!'
__init__.py
from App.views import init_route
def create_app():
app = Flask(__name__)
init_route(app)
return app
启动
在此写路由
结果
路由的管理
-
使用的时候容易出现循环引用的问题
-
使用懒加载的方法
使用函数调用的形式进行加载
-
使用新方案解决
蓝图
代表一种规划
路由的规划
flask-blueprint
pip install flask-blueprint
使用蓝图
先注册蓝图,再引用
结果
重启后 反应较快。-r 感觉还不太行
使用蓝图
把view 转换成包,新建first_blue, 把项目下的代码拷贝到新建文件下
再导包
结果
创建第二个蓝图
from flask import Blueprint
second=Blueprint('second',__name__)
@second.route('/hello/')
def hello():
return 'second'
结果
改进代码
结果
显示 html 页面
也面串参 字典
1. 安装SQLalchemy
pip install flask-sqlalchemy
创建模型
配置 数据库连接
运行后
添加配置
添加字段
添加函数,执行函数
出现数据库标识
右击打开数据库
创建成功
简单实现保存到数据库
view
# 改进 就使用 model.save
调用save 方法
结果
删除数据库
将据库 改为 mysql:
def create_app():
app = Flask(__name__)
# init_route(app)
# app.register_blueprint(blue)
# app.register_blueprint(second)
# 连接数据库
# URI样式: 数据库 + 驱动://用户名:密码@主机:端口/具体哪一个库
# app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///sqlite.db'
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+pymysql://root:@localhost:3306/helloflask'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
# 调用模型函数方法
# init_model(app=app)
init_ext(app)
# 去views 下的__init__ 初始化 调用
init_view(app=app)
return app
安装pymysql ,新建的虚拟环境
配置开发 测试 演示 ,生产 环境
def get_db_uri(dbinfo):
engine = dbinfo.get('ENGINE') or 'sqlite'
driver= dbinfo.get('DRIVER') or 'sqlite'
user = dbinfo.get('USER') or ''
password = dbinfo.get('PASSWORD') or ''
host = dbinfo.get('HOST') or 'loaclhost'
port = dbinfo.get('PORT') or ''
name = dbinfo.get('NAME') or ''
return '{}+{}://{}@{}:{}/{}'.format(engine,driver,user,password,host,port,name)
class Config:
DEBUG = False
TESTING = False
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 开发环境
class DevelopConfig(Config):
DEBUG = True
dbinfo = {
'ENGINE':'mysql',
'DRIVER':'pymysql',
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT':'3306',
'NAME':'helloflask'
}
SQLALCHEMY_DATABASE_URI=get_db_uri(dbinfo)
# 测试环境
class TestConfig(Config):
TESTING = True
dbinfo = {
'ENGINE':'mysql',
'DRIVER':'pymysql',
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT':'3306',
'NAME':'helloflask'
}
SQLALCHEMY_DATABASE_URI=get_db_uri(dbinfo)
# 演示环境
class stagingConfig(Config):
dbinfo = {
'ENGINE':'mysql',
'DRIVER':'pymysql',
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT':'3306',
'NAME':'helloflask'
}
SQLALCHEMY_DATABASE_URI=get_db_uri(dbinfo)
# 生产环境
class ProductConfig(Config):
dbinfo = {
'ENGINE':'mysql',
'DRIVER':'pymysql',
'USER':'root',
'PASSWORD':'',
'HOST':'localhost',
'PORT':'3306',
'NAME':'helloflask'
}
SQLALCHEMY_DATABASE_URI=get_db_uri(dbinfo)
让flask 执行迁移,像Django一样
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
migrate = Migrate()
models = SQLAlchemy()
def init_ext(app):
models.init_app(app)
migrate.init_app(app,models)
使用migrate 命令执行迁移
第一次使用 db ,执行初始化
生成迁移文件
python manage.py db migrate
此时 数据库 还没有 生成表。执行迁移文件
python manage.py db upgrade