flask学习(1)- 创建flask项目和模型

一、 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

exts.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值