创建一个flask项目目录(结构配置,SQLAlchemy,邮件,消息闪现等)
展示一下当前的目录结果
|-feng7309 # 项目文件夹
|--|apps # 统一管理所有的蓝图信息
|--|--|users # users 蓝图
|--|--|--|__init__.py # 蓝图声明和初始化
|--|--|--|login.py # 蓝图视图文件 执行业务逻辑
|--|--|--|for_db.py # 测试一些数据库的使用情况
|--|--|--|send_mail.py # 测试发送邮件
|--|utils # 工具文件夹,保存一些工具文件
|--|--|read_config.py # 读取配置文件的共计代码
|--|static # 保存静态文件
|--|--|css.py # 保存样式文件上
|--|--|js.py # 保存js文件
|--|--|images.py # 保存图片文件
|--|templates # 保存依稀静态的模板文件 html
|--|base_object.py # 用于创建一些扩展的对象,防止循环导入的现象
|--|config.ini # 外部信息配置文件
|--|create_app.py # 用于对flask项目进行数据初始化等信息配置,创建flask对象
|--|models.py # 所有的数据库模型代码
|--|req.txt # 需要的第三方包的名字和版本
|--|run.py # 程序入口文件
|--|setting.py # 做一些区分性的配置,分类拆分
# 以下文件不用管
# enve 我自己的虚拟环境
# migration 迁移数据库生成的文件
1 创建空文件
# 创建一个空文件,将空文件突拖入pycharm中
# 创建 feng7309
2 创建环境创建目录结构
# 1 创建apps 文件夹,管理蓝图
# 2 创建utils 保存工具文件
# 3 创建虚拟环境 并将学你环境存放在项目目录下面 我用的是 python3.8
并在虚拟环境终端安装flask
pip install flask
# 4 安装指定文件的包
pip install -r req.txt
3 项目的编写
1 创建 入口文件 run.py
2 创建 create_app.py
3 创建 settings.py
4 在utils下创建 read_config.py 文件
5 创建 config.ini 文件
6 创建 base_object.py 统一创建第三方扩展对象
3.1 create_app.py
from flask import Flask
# 创建数据库对象
def create_app():
flask_app = Flask(__name__)
# 加载配置
# 注册蓝图
# 配置第三方扩展
# 返回 flask对象
return flask_app
3.2 run.py
from create_app import create_app
# 导入模型类
from models import Users
# 通过 create_app 创建flask对象
app = create_app()
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
这样就可以运行了 ,127.0.0.1:5000 启动
3.3 配置信息,加载配置信息
config.ini
[DB]
HOST = 127.0.0.1
PORT = 3306
USERNAME = root
PASSWORD = root
NAME = flask_db
[SERVER]
DEBUG = True
HOST = 127.0.0.1
PORT = 5000
read_config.py
import configparser
class ReadConfig:
"""
创建一个读取配置文件的类
"""
def __init__(self):
"""
初始化连接配置对象,和配置文件位置
"""
self.config_path = r'C:\Users\FengHan7309\Desktop\base\feng7309\config.ini'
self.read_config()
def read_config(self):
"""
读取配置文件,返回读取配置对象
:return: 读取文件配置文件对象
"""
self.config = configparser.ConfigParser()
self.config.read(self.config_path)
def config_value(self, section, key):
"""
通过获取secton和key获取指定的值
:param section: section
:param key: key
:return: value
"""
value = self.config[section][key]
return value
rc = ReadConfig()
settings.py
# -*- coding: utf-8 -*-
from utiles.read_config import rc
class BaseConfig:
# 基础配置信息
DEBUG = True
SECRET_KEY = "qwertyuiopasdfghjklzxcvbnm"
host = rc.config_value("DB", "HOST")
port = int(rc.config_value("DB", "PORT"))
username = rc.config_value("DB", "USERNAME")
password = rc.config_value("DB", "PASSWORD")
db_name = rc.config_value("DB", "NAME")
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{
username}:{
password}@{
host}:{
port}/{
db_name}"
SQLALCHEMY_TRACK_MODIFICATIONS = False
class DevelopmentConfig(BaseConfig):
# 开发环境配置信息
...
class TestConfig(BaseConfig):
# 测试环境配置信息
...
class ProductionConfig(BaseConfig):
# 生产环境配置信息
...
修改create_app.py 进行信息的的配置
# -*- coding: utf-8 -*-
"""
from flask import Flask
import settings
from flask_sqlalchemy import SQLAlchemy
def create_app():
flask_app = Flask(__name__)
# 加载配置
flask_app.config.from_object(settings.DevelopmentConfig)
# 注册蓝图
# 配置第三方扩展
return flask_app
创建 base_object.py 创建扩展信息
from flask_mail import Mail
from flask_sqlalchemy import SQLAlchemy
# 创建数据库对象
db = SQLAlchemy()
# 创建邮件对象
mails = Mail()
4 蓝图 users
创建一个python package,并在包下面创建一个login.py
4.1 _ _init _ _.py
from flask import Blueprint
user_dp = Blueprint('user', __name__)
# 引用蓝图的视图
from . import login
4.2 login.py
from apps.users import user_dp
# 使用蓝图定义路由和视图,功能
@user_dp.route('/login', methods=['GET'])
def login():
return "this is a login func"
4.3 修改create_app注册蓝图
from flask import Flask
import settings
from apps.users import user_dp
# 创建数据库对象
def create_app():
flask_app = Flask(__name__)
# 加载配置
flask_app.config.from_object(settings.DevelopmentConfig)
# 注册蓝图
flask_app.register_blueprint(user_dp, url_prefix="/user")
# 配置第三方扩展
return flask_app
重启项目,可以在127.0.0.1:5000/user/login 可以进行login信息的访问
5 SQLAlchemy的使用和配置
5.1 相关包的安装
使用mysql创建一个数据库名为 flask-db
pip install sqlalchemy
pip install lask_migrate
pip install flask_script
pip install pymysql
5.2 models.py
run文件夹同目录下创建models.py文件
from datetime import datetime
from email.policy import default
from create_app import db
# 创建用户表 命名为 f_users
class Users(db.Model):
__tablename__ = 'f_users'
id = db.Column(db.Integer, pri