博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask02项目拆分
阅读量:3939 次
发布时间:2019-05-23

本文共 3271 字,大约阅读时间需要 10 分钟。

对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 Flaskfrom App.views import init_routedef create_app():    app = Flask(__name__)    init_route(app)    return  app# manager.pyfrom App import create_appapp = 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:Sqlroot123!@xx.xx.xx.xx: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)

转载地址:http://tcywi.baihongyu.com/

你可能感兴趣的文章
jQuery中清空与删除节点 empty、remove
查看>>
测试之颠,必先利其器
查看>>
Linux grep命令详解
查看>>
Python字符串操作集锦之字符串去空格及去指定字符
查看>>
Python字符串操作之复制、连接、比较、求长度
查看>>
Python字符串操作之字符大小写转换
查看>>
Python字符串操作之扫描、翻转、截取、输出对齐
查看>>
Python字符串操作之字符串搜索与替换
查看>>
Python字符串操作之字符串分割与组合
查看>>
Python函数操作集锦之字符串测试、判断函数
查看>>
Python字符串操作集锦之字符串映射表
查看>>
Python字符串操作集锦之字符串编码解码函数
查看>>
Python字符串类型转换函数
查看>>
Python有用的命令
查看>>
Python条件语句
查看>>
Python eval()函数
查看>>
Linux vi编辑器命令详解
查看>>
Linux常用命令之man/mv/shutdown/history
查看>>
Linux rz和sz命令详解
查看>>
Python 函数之函数定义、调用、传参
查看>>