[记录帖-待编辑]搭建Flask初始框架_初始化数据库_分离数据库表文件/视图文件/init构造文件

flask-sqlalchemy

#1
  • 分离数据库表文件/视图文件/init构造文件/解决循环引用问题
  • 文中如有不正确之处,还请大佬指正
  • 此帖仅作为自己的学习记录,不要当作教程帖,如对各位有些许帮助 请随意参考点个赞就行

1.准备工作
[文件及目录格式]
1.1 创建项目文件夹
1.2 项目文件中创建虚拟环境文件夹并初始化
1.2 同时创建程序文件夹,详细目录格式如下:

watchlist                  >>>项目文件夹
│  .flaskenv               >>>环境变量文件,设置程序名,设置测试/生产环境等
│  
├─.venv-watchlist          >>>虚拟环境文件夹
│          
├─watchlistapp             >>>程序文件夹
│  │  __init__.py          >>>构造文件
│  │  
│  ├─a_GroupRouting        >>>在这个目录我存放视图相关的文件
│  │  │  viewapp.py        >>>视图文件
│  │  │  __init__.py       >>>构造文件
│  │  └─
│  │          
│  ├─b_Setting             >>>在这个目录我存放数据库相关的文件,包括class类
│  │  │  mysql_class.py    >>>class类文件
│  │  │  mysql_config.py   >>>连接数据库配置信息文件
│  │  │  __init__.py       >>>构造文件
│  │  └─
│  │          
│  ├─c_Extends             >>>在这个目录我存放一些需要引用相关的文件,例如db
│  │  │  exts.py           >>>引用文件
│  │  │  __init__.py       >>>构造文件
│  │  └─
│  │          
│  ├─d_Static              >>>在这个目录我存放静态文件
│  │  │  
│  │  ├─effect
│  │  │      
│  │  └─images
│  │          
│  ├─e_Templates           >>>在这个目录我存放模版文件
│  │      index.html
│  │      movie.html
│  └─       
└─

image

[其他需要准备的]
1.3 虚拟机-VMware Workstation Pro
1.4 虚拟机中安装Centos系统
1.5 安装Mysql数据库,要能保证能从父机连接mysql,系统重启后Mysql自启动并自动监听Mysql的端口
1.6 若有闲情可以顺带开启SFTP,可以熟悉下在PyCharm中远程部署项目至服务器:thinking:
[准备工作时,创建虚拟环境,flask run之前用到的一些库]
1.7 首先创建项目文件夹,创建程序文件夹
1.8 再创建虚拟环境目录,创建之前先进入项目文件夹目录,然后使用命令 python -m venv 文件夹名字
1.9 在PyCharm中导入项目文件夹,然后在PyCharm中使用Terminal工具,进入虚拟环境文件夹的scripts目录
1.9.1 再输入activate,激活虚拟环境,激活后使用pip安装依赖库,安装的库只会在虚拟环境中安装
1.9.2 然后返回至程序文件夹目录

2.安装一些初始常用的依赖库
2.1 pip install flask
2.2 pip install python-dotenv
[管理环境变量/手动设置的环境变量>.env中设置的环境变量>.flaskenv设置的环境变量]
2.3 pip install watchdog
[代码如有变动,开发环境下自动重载Flask服务]
2.4 至此,虚拟环境已经创建完毕并激活,目录结构及相关文件也都创建好了

3.搭建初始框架
3.1 新建一个数据库,名字随意,我这学习测试命名为"tcgamelist2"
3.2 顺便安装 pip install flask-sqlalchemy
3.3 顺便安装 pip install pymysql

目录:b_Setting\mysql_config.py 配置下连接数据库的相关参数
# -*- coding:utf-8 -*-
DIALECT = 'mysql'# 数据库类型
DRIVER = 'pymysql'# 连接数据库的驱动
USERNAME = 'root'# 用户名
PASSWORD = '123456'# 密码
HOST = '192.168.101.118'# 连接地址
PORT = '3306'# 端口
DATABASE = 'tcgamelist2'# 数据库名
DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8mb4".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST,PORT, DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_POOL_TIMEOUT = 10# 连接数据库超时10s连接失败
SQLALCHEMY_POOL_RECYCLE = 1200# 连接数据库后1200s后,断开闲置连接
SQLALCHEMY_ECHO = False# [调试]关闭打印sql语句
SQLALCHEMY_TRACK_MODIFICATIONS = False# [调试]关闭追踪数据库的修改

目录:c_Extends\exts.py 解决多个文件中可能出现循环引用问题
# -*- coding: utf-8 -*-
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
目录:b_Setting\mysql_class.py 初始化表及表中各字段规则
# -*- coding:utf-8 -*-
from watchlistapp.c_Extends.exts import db

class Movieusers(db.Model):# 表名将会是 movieusers(自动生成,小写处理)
    __tablename__ = 'movieusers'# 自定义表名字
    id = db.Column(db.Integer, primary_key=True)# 主键
    username = db.Column(db.String(20), nullable=False)# 名字
    userpassword = db.Column(db.String(20), nullable=False)# 密码

class Movielist(db.Model):# 表名将会是 movielist
    __tablename__ = 'movielist'# 自定义表名字
    id = db.Column(db.Integer, primary_key=True)# 主键
    movieusers_id = db.Column(db.INTEGER, db.ForeignKey('movieusers.id'))# 外键 对应movieusers表中的id
    title = db.Column(db.String(60), nullable=False)# 电影标题
    year = db.Column(db.String(4), nullable=False)# 电影年份
    movieusers_id_get = db.relationship('Movieusers', backref=db.backref('movielist'))# 反向引用,从1表寻找2表对应的数据
db.create_all()
目录:watchlistapp\__init__.py 构造文件,初始化相关等
由于templates默认名我改成了e_Templates,所以要用到template_folder参数
# -*- coding:utf-8 -*-
from flask import Flask
from watchlistapp.c_Extends.exts import db
from watchlistapp.b_Setting import mysql_config

app = Flask(__name__, template_folder='e_Templates')
app.config.from_object(mysql_config)
# 数据库连接
db.init_app(app)
db.app = app

from watchlistapp.a_GroupRouting import *

请注意每个子目录中都有个__init__文件,自行搜索其作用

目录:a_GroupRouting\viewapp.py
# -*- coding:utf-8 -*-
from watchlistapp import app
#from watchlistapp.b_Setting.mysql_class import *

@app.route('/')
def hello():
    return ('hello')

到目前,运行Flask Run后打开页面即可出现hello,数据库中也会新增两张表和生成相应字段