一、 pycharm创建flask项目
分为三步:
第一步 创建flask项目。
第二步 flask和模型(数据库)关联
第三步 执行数据迁移命令
1.1修改其文件
项目中新建flask_1文件夹,将static和templates文件夹剪切进flask_1文件夹
创建 __init__.py文件。
创建 models.py 文件,用来放模型(数据库)。
创建 views.py文件,用来存放路由 + 视图函数。
创建 exts.py文件,用在存放flask插件。
1.2 创建flask相关
__init__.py导入flask和views.py文件。
# __init__.py
from flask import Flask
from .views import *
app = Flask(__name__)
views.py
# views.py
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
一个项目中可能会有多flask项目,flask_1项目与外部app.py产生联系,__init__py改写为,这样每次调用flask_1包都会返回一个app。
# __init__py
from flask import Flask
from .views import *
def create_app():
app = Flask(__name__)
return app
app.py调用flask包。
# app.py
from flask_1 import create_app
app = create_app()
if __name__ == '__main__':
app.run()
但是Flask是外部 app.py调用flask_1包中的__init__.py实现的,所以 views.py 中的使用的路由和视图函数想要采用就得调用app.py或者__init__.py的数据,但是这会产生互相引用的错误。
为了解决上面的问题我们采用蓝图来解决上面的问题,修改views.py 的文件的内容,创建蓝图。
# views.py
from flask import Blueprint
blue = Blueprint('user', __name__)
@blue.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
修改__init__.py内容,注册蓝图,当然可以创建很多个蓝图,注册很多个蓝图:
# __init__.py
from flask import Flask
from .views import *
def create_app():
app = Flask(__name__)
app.register_blueprint(blueprint = blue)
return app
二、开始建立与模型(数据库)相关
数据库相关的有两个文件,models.py用来存放模型和exts.py文件用来存放flask插件,
修改exts.py文件,为了flask插件和app实例绑定,创建init_ext函数,__init__.py在创建app实例(app.py在调用flask_1包创建app实例)的时候 直接调用此函数绑定。
# exts.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy() # 数据库对象 ORM映射
migrate = Migrate() # 数据库迁移
def init_ext(app): # 函数作用与app实例绑定
db.init_app(app)
migrate.init_app(app, db)
models.py 先采用Sqlite数据库
# models.py 模型 数据库
from .exts import db
# 模型 ==> 数据库
# 类 ==> 表结构
# 类属性 ==> 表字段
# 一个对象 ==> 表的一行记录
# 模型 Model 类
# SQLAlchemy 让类变成模型
# Migrate 让模型变成表
class User(db.Model): # 必须继承自db.Model
# 表名
__tablename__ = 'tb_user'
# 字段id
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50), unique=True, index=True, nullable=False)
age = db.Column(db.Integer, default=1)
sex = db.Column(db.Boolean, default=True)
salary = db.Column(db.Float, default=10000.0, nullable=True)
记得在views.py中下面的代码。
from .models import *
__init__.py文件通过 exts.py 文件中 init_ext 函数与 models.py 中的模型(数据库)产生关联。
# __init__.py
from flask import Flask
from .views import *
from .exts import init_ext
def create_app():
app = Flask(__name__)
app.register_blueprint(blueprint = blue)
db_uri = 'sqlite:///sqlite_1.db'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
init_ext(app)
return app
三、执行数据迁移
先在cmd 或者terminal进入项目目录(app.py所在目录)
flask db init # 创建迁移文件夹 migrates ,只调用一次
flask db migrate # 生成迁移文件
flask db upgrade # 执行迁移文件中的升级
flask db downgrade # 执行迁移文件中的降级
鼠标把数据库拖过去
成功
四、完整代码
app.py文件:
from flask_1 import create_app
app = create_app()
if __name__ == '__main__':
app.run()
__init__.py
from flask import Flask
from .views import *
from .exts import init_ext
def create_app():
app = Flask(__name__)
app.register_blueprint(blueprint = blue)
db_uri = 'sqlite:///sqlite_1.db'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
init_ext(app)
return app
views.py存放插件
# 用来存放flask 插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy() # 数据库对象
migrate = Migrate() # 数据库迁移
def init_ext(app):
db.init_app(app)
migrate.init_app(app, db)
models.py存放模型
# 用来存放模型类
# models.py 模型 数据库
from .exts import db
# 模型 ==> 数据库
# 类 ==> 表结构
# 类属性 ==> 表字段
# 一个对象 ==> 表的一行记录
# 模型 Model 类
# SQLAlchemy 让类变成模型
# Migrate 让模型变成表
class User(db.Model): # 必须继承自db.Model
# 表名
__tablename__ = 'tb_user'
# 字段id
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50), unique=True, index=True, nullable=False)
age = db.Column(db.Integer, default=1)
sex = db.Column(db.Boolean, default=True)
salary = db.Column(db.Float, default=10000.0, nullable=True)
views.py 存放路由 + 视图函数
# 用来存放 路由 + 视图函数
from flask import Blueprint
from .models import *
blue = Blueprint('user', __name__)
@blue.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
flask刚刚入门,以上是为了创建flask项目和模型 理清头绪。
学习视频是:千锋教育Flask2框架从入门到精通,Python全栈开发必备教程_哔哩哔哩_bilibili