flask02项目拆分

对flask项目进行简单拆分:

修改成mvc模式:

  • 使用 flask-script 拓展将
    app.py 文件修改成manager.py

  • 修改项目结构:
    在这里插入图片描述

路由管理:

  • 直接将视图写到view.py 里面是不会被加载到服务器的;
  • 并且相互导入文件但是不能出现循环引用。

要解决的问题是: views需要导入app对象,但是app对象又需要调用到views。

  • 故可以将app对象,放到app模块中去实例化:

  • 最后将路由注册方法单独的 views文件的函数中。函数需要一个参数app然后在app模块的init文件中,新建一个app对象的时候,将对象带进去这个函数,那么路由就会绑定到这个app对象上面

最后manager文件将这个app对象启动。
也就是app这个对象,是在views.py文件或者说views模块中的 creat_app()函数中 进行实例化,之后也可以采取放到 app模块的init.py文件中去

  • 懒加载解决:
    缺点,不能够让views里面的结构分文件显示只能在一个文件里面写route
    通过参数的形式来传递。
  • 代码后附上:
#views.py:

def init_route(app):

    @app.route('/')
    def hello_world():
        return 'Hello World!'

#init:
from flask import Flask
from App.views import init_route

def create_app():
    app = Flask(__name__)
    init_route(app)
    return  app

# manager.py

from App import create_app

app = create_app()

manager = Manager(app=app)

文件结构:

项目文件结构

路由管理更好的方法-蓝图

  • 路由的一种规划,一种设计

  • flask-blueprint

  • bludeprint 使用出现问题。只要在文件里面输出参数 __name__就报错

注意:名字定位错误。。。
结果: pycharm自动导包错误。
应该是:from flask import Blueprint

使用指南: 三种方法,推荐最后一种

  • 在views文件中定义一个 Blueprint对象,然后在app生成后注册到app里面。在新的blueprint对象下面写路由。

  • 将views作为模块,在init.py文件中去引用其他文件,将其他文件生成的实例全部到init.py中引用:
    from .first_blue import blue
    依然还是在 app生成之后注册。也就是在APP的init.py文件中注册路由

  • 在views 模块中新建init_views()函数,然后注入app对象,在views模块的init.py文件中进行路由的注册。

路由返回模版对象:

使用 return render_template(‘index.html’)方法返回模版对象;

传参数到模版里面:render_template(‘index.html’,msg=‘这是信息’)//key-value传值。

关系型数据库(ORM):

  • SQLALchemy //python都能用
  • 使用flask-SQLALchemy
  • 数据库的uri:

数据库+驱动://用户名:密码@主机:端口/具体哪一个库

  • 使用 Sqlite:
    • SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

连接语句:

 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sqlite.db'

注意事项 第一次在pycharm中使用,要记得安装驱动;
进行测试连接:
在这里插入图片描述

定义模型类:继承db.Model

SQLAlchemy的对象 db操作数据库的语法:

# 创建:
db.crete_all()

# 删除:
db.drop_all()

#添加
db.session.add()
db.session.commit()

  • 换数据库连接:使用mysql
  • 例如连接我的mysql:mysql+mysqlconnector://hhh:[email protected]:3306/hello

pycharm支持自己连接数据库(输入参数即可),可以少可开navicate去查看数据库了。

注意事项

pycharm连接mysql之后,记得选择schema文件。把自己的那个数据库包括进去。不然看不到。

二级变化项目结构:setting.py,ext.py文件;

  • 将数据库的配置和初始化放到 ext.py文件中
  • 项目设置放到setting.py文件中。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkXYZp1k-1580110984894)(img/flask02/flask02-2020-01-21-02-05-54.png)]

感悟:python只能一个主文件,慢慢去调用其他文件。

在此拆分之后:
之后就可以通过在route里面写业务逻辑然后去调用db对象进行数据库操作。

可以在模型里面 添加sava方法:具体使用过程:

   def save(self):
        db.session.add(self)
        db.session.commit()

终极拆分:

  • 适应公司开发,多套环境:

    • 开发环境:开发人员使用
    • 测试环境:测试人员使用
    • 演示环境:给产品看的,做演示,彩排
    • 生产环境:线上真实部署。
  • 将config 拿到setting.py文件中去:

    • 在其中定义基础配置类,开发,测试配置类。get数据库uri方法。
  • 然后给app添加config的时候,使用

app.config.from_object(envs.get('develop)')

env 里面的develop变量可以从manager.py 传入
将指定环境放到manage.py

//另外可以通过os.environ.get(‘FLASK_ENV’,‘develop’).实现通过电脑自动获取 环境变量来指定环境

(其实也只是有点点用。。。)

  • 如果新建一个表,通过orm映射成表之后,想要添加属性。或者说添加表的字段。 直接create_db 是不能更新表结构的。
  • 需要先 drop_db,在create才能更新表结构。

不能动态更新表;

数据库迁移: flask-migrate扩展的使用

懒加载方式,需要db,app对象来进行初始化

migrate = Migrate()

def init_ext(app):
    db.init_app(app=app)
# 初始化管理者,需要app
    migrate.init_app(app,db)
  • 命令行结合 flask-scirpt 使用:
# 初始化
python manager.py db init

# 检查表加表
python manager.py db migrate 

# 更新到数据库
python manager.py db upgrade

到此为止 对应java ssh

前端的 route 对应 写接口,应该掉servece

model 也已经定义好了

servece 调用mapper (直接orm完成了)还没搞好。

  • 项目结构图:
    在这里插入图片描述

项目结构:
在这里插入图片描述

按照模块拆分:

  • user模块里面 有mvc三种文件;
  • 每一个模块里面,都有三种文件:mvc v还是用的template
  • 可以把某一个模块拎出来放在主目录外面。(我不喜欢分模块写models,和views)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章