- 分离数据库表文件/视图文件/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
│ └─
└─
[其他需要准备的]
1.3 虚拟机-VMware Workstation Pro
1.4 虚拟机中安装Centos系统
1.5 安装Mysql数据库,要能保证能从父机连接mysql,系统重启后Mysql自启动并自动监听Mysql的端口
1.6 若有闲情可以顺带开启SFTP,可以熟悉下在PyCharm中远程部署项目至服务器
[准备工作时,创建虚拟环境,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,数据库中也会新增两张表和生成相应字段