【Flask项目结构搭建】

项目结构搭建

创建一个Flask项目

第一步

先创建一个python Package 起名叫做app

第二步

把static文件夹和template文件夹放入app文件夹中

第三步

创建settings.py配置文件
"""
ENV = "development"
DEBUG = True
SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:123456@39.106.150.87:3306/py1901"
SQLALCHEMY_TRACK_MODIFICATIONS = True
--------------------------------------------------------------------
# secret key
SECRET_KEY = 'dhfjh244djsqopfv5790874878jchfjh'
# SECRET_KEY=os.urandom(24)
PERMANENT_SESSION_LIFETIME = timedelta(hours=1)
--------------------------------------------------------------------
# permanent_session_lifetime
BASE_DIR = os.path.dirname(__file__)
# print(BASE_DIR)
UPLOAD_DIR = os.path.join(BASE_DIR, 'app/static/upload')
"""

第四步

重命名启动文件app.py文件名为manage.py

第五步

将启动文件manage.py中"""app = Flask(__name__)"""去除,仅作为启动文件@app.route('/')def hello_world():return 'Hello World!

第六步

在app文件夹中的__init__.py(存放各种配置文件。蓝图,模型等配置文件都放在这个文件夹中)文件中去构建app
"""from flask import Flaskimport settingsdef create_app():app = Flask(__name__)app.config.from_object(settings)return app                                                                       """

第七步

在manage.py文件中要拿到__init__中创建的app对象,调用create_app()这个函数,返回app对象然后使用flask_script中Manager(app)这个类,将app作为实参传入创建一个manager对象来管理app对象"""from app import create_appfrom flask_script import Managerapp = create_app()manager = Manager(app)"""因为把app的权利交给了manager,所以把app.run() 改为了manager.run()

第八步

使用views包,创建一个user_views.py文件,将所有的路由都放在其中)为了避免循环导入,所以使用蓝图在user_views.py文件中:
"""
from flask import Blueprintuser_bp = Blueprint('user',__name__,url_prefix='/user')  #定义蓝图  #rl_prefix:路径的前缀@user_bp.route('/') #使用蓝图对象定义路由,相当于app.route('/')
def index():return"....""""

第九步

在app包中的__init__文件中使用主函数app注册蓝图:app.register_blueprint(user_bp)

===========================================================================

pip install pymysql   驱动,相当于pycharm和数据库的链接桥梁
pip install flask sqlalchemy 完成数据的映射
pip install flask-script  脚本命令 操作命令

============================================================================

第十步

为了完成数据库的映射,就需要构建一个sqlalchemy对象,就需要在外围创建一个exts拓展包,所有通过pip安装的都放在这个exts包里,在exts包中的__init__.py文件中创建操作数据库的操作:
"""
from flask_sqlalchemy import SQLAlchemy#创建一个sqlalchemy类对象来完成python中对象和数据库中表的迁移映射
db = SQLAlchemy()
"""
在app文件夹中的__init__.py文件中,完成sqlalchemy的初始化:
"""
from exts import dbdb.init_app(app)
"""
这样db就和app关联起来了,就相当于给db通电了在配置文件settings.py中添加连接数据库的配置:
"""
SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:123456@39.106.150.87:3306/py1901"
SQLALCHEMY_TRACK_MODIFICATIONS = True
"""

第十一步

在models包中,创建user_model.py模型,在文件中创建一个User类,这个类需要继承db.model构成一个模型类对应数据库中的一张表,来完成映射:
"""
from exts import dbclass User(db.model):__tablename__ = 'user'id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(10), nullable=False)password = db.Column(db.String(12), nullable=False)phone = db.Column(db.String(11), nullable=False, unique=True)usertype = db.Column(db.String(20))def __str__(self):return self.username"""

第十二步

因为manager的内置命令只有两个:runserver、shell,为了执行与数据库完成映射,所以需要给manager添加命令,在在启动文件manage.py添加:
"""
from exts import db
from app.models import user_model migrate=Migrate(app=app,db=db)
manager.add_command('db',MigrateCommand)
"""
使用命令:python manage.py db initpython manage.py db migrate - --迁移python manage.py db upgrade来完成python模型与数据库之间的迁移映射

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/838278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序蓝牙连接ESP32通信(可直接拿来用)

小程序中的蓝牙能力 在小程序中,要使用蓝牙能力(Beacon 除外)必须首先调用 wx.openBluetoothAdapter 初始化蓝牙适配器模块,其生效周期为调用 wx.openBluetoothAdapter 至调用 wx.closeBluetoothAdapter 或小程序被销毁为止。只有…

评价决策类-层次分析法

师从江北 问题引出 归一化处理:指标的数组[a b c]归一化处理得到[a/(abc),b/(abc),c/(abc)] 因为每个指标的重要性不同,所以要加上一个权重 如何科学的确定权重,就要用到层次分析法(AHP) 模型原理 建立递阶层次结构模…

VMware17虚拟机安装Kali Linux2024详解

目录 简介 一、环境搭建 二、下载ISO镜像 三、新建虚拟机 为虚拟机选择合适的操作系统类型和版本 分配适当的内存、硬盘空间和其他虚拟机配置选项 四、硬件配置 编辑虚拟机设置 选择安装介质 五、界面化安装配置 简介 Kali Linux是一个基于Debian的Linux发行版&#…

【记录】docker笔记(五):Docker网络-Network Namespace

Docker 网络理论基础 要了解docker网络,先了解如下基础概念。 Network Namespace Docker 网络的底层原理是 Linux 的 Network Namespace ,所以对于 Linux Network Namespace 的理解对 Docker 网络底层原理的理解非常重要。 简介 Network Name…

【董晓算法】动态规划之线性DP问题

前言: 本系列是看的B站董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 树塔-记忆化搜索 特点(前提):从上向下的累加和是不能重复使用的,从下向上的累加和是可以重…

C++进阶:哈希(2)位图与布隆过滤器

目录 1. 位图(bitset)1.1 引子:海量整形数据的处理1.2 结构描述1.3 位图实现1.4 位图相关题目练习 2. 布隆过滤器(BloomFilter)2.1 引子:海量非int类型数据处理(string)2.2 结构描述…

文心一言 VS 讯飞星火 VS chatgpt (252)-- 算法导论18.2 5题

五、因为叶结点无需指向孩子结点的指针,那么对同样大小的磁盘页面,可选用一个与内部结点不同的(更大的) t 值。请说明如何修改 B 树的创建和插人过程来处理这个变化。如果要写代码,请用go语言。 文心一言: 当我们在B树&#xff…

搭载全新升级viaim AI,讯飞会议耳机Pro 2首销价1399元起

2024年5月15日,人工智能硬件公司未来智能发布了讯飞会议耳机Pro 2、iFLYBUDS 2以及Kit 2三款旗舰新品,为用户带来全新升级的viaim AI,也为AIGC智能耳机树立了新标杆。 在发布会上,未来智能CEO马啸表示:在AIGC领域&…

【C++ 高阶数据结构 Test】AVL ~ 二叉搜索树

文章目录 1. AVL 树概念2. AVL 树节点的定义3. AVL树的插入4. AVL树的旋转4.1 新节点插入较高左子树的左侧---左左:右单旋4.2 新节点插入较高右子树的右侧---右右:左单旋4.3 新节点插入较高左子树的右侧---左右:先左单旋再右单旋4.4 新节点插…

【JAVA入门】Day05 - 面向对象

【JAVA入门】Day05 - 面向对象 文章目录 【JAVA入门】Day05 - 面向对象一、对象的设计和使用1.1 类和对象1.2 类的分类 二、封装三、private 关键字四、this 关键字五、构造方法六、JavaBean七、对象的内存图7.1 一个对象的内存图7.2 两个对象的内存图7.3 两个引用指向同一个对…

【练习】分治--快排思想

🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 颜色分类 题目描述 题解 代码实现 排序数组 题目描述 题解 代码…

战网国际服下载教程 暴雪战网客户端一键下载安装教程分享

战网国际服务平台,又名Battle.net环球版,是暴雪娱乐操作的跨国界游戏交流平台,它消除了地域的隔阂,向全球范围内的游戏爱好者提供服务。与仅服务于特定地区的版本不同,国际版赋予了玩家自由穿梭于暴雪众多标志性游戏的…

ubuntu中如何删除常规匹配不到的乱码目录文件

原因是之前误操作创建了多个带空格的gerrit仓库的时候导致的服务器乱码,进入geriit服务器可以查看到如下的一个异常目录,常规rm -rf 操作的时候是匹配不到这个目录的。 这时候我们应该考虑使用inode的性质来匹配删除。 注:在Linux文件系统中…

2024OD机试卷-CPU算力分配 (java\python\c++)

题目:CPU算力分配 题目描述 现有两组 服务器 A和B,每组有多个算力不同的CPU,其中 A[i] 是 A 组第 i 个CPU的运算能力,B[i] 是 B组 第 i 个CPU的运算能力。 一组服务器的总算力是各CPU的算力之和。 为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换, 求…

数论专题练习

质数专题 我的思路就是一个素数筛&#xff0c;然后双指针 class Solution { public:int maximumPrimeDifference(vector<int>& nums) {unordered_map<int, int> mp;for (int i 2; i < 100; i) {if (mp[i] 0) {for (int j 2 * i; j < 100; j i) {mp[…

失业焦虑如何缓解心情?流静冥想

失业焦虑如何缓解心情&#xff1f;人生旅途&#xff0c;失业犹如山重水复&#xff0c;焦虑似迷雾遮望眼。古语云&#xff1a;“山不厌高&#xff0c;海不厌深。”心之向往&#xff0c;冥想便是那披荆斩棘之斧&#xff0c;如何带你走出困境&#xff1f; “静以修身”&#xff0c…

Python使用asyncio包实现异步编程

1. 异步编程 异步编程是一种编程范式&#xff0c;用于处理程序中需要等待异步操作完成后才能继续执行的情况。异步编程允许程序在执行耗时的操作时不被阻塞&#xff0c;而是在等待操作完成时继续执行其他任务。这对于处理诸如文件 I/O、网络请求、定时器等需要等待的操作非常有…

MATLAB数组

文章目录 数组创建通过冒号创建一维数组通过logspace函数创建一维数组通过linspace函数创建一维数组 通过randperm生成随机整数排列运算算术运算关系运算逻辑运算优先顺序 矩阵创建矩阵操作下标引用矩阵信息提取删除与扩展合并矩阵元素的运算矩阵运算 数组 在MATLAB中一般使用…

RALL-E: Robust Codec Language Modeling with Chain-of-Thought Prompting for TTS

demo pageDetai Xin&#xff0c; tanxu微软 & 东大 & 浙大 abstract 使用CoT的思路&#xff0c;和Valle的框架&#xff0c;先实现LLM预测音素级别pitch/duration&#xff0c;然后预测speech token。 methods Prosody tokens as chain-of-thought prompts 和Valle一…

6. 网络编程-网络io与select、poll,epoll

https://0voice.com/uiwebsite/html/courses/v13.7.html 首先看看这个学习计划 网络、网络编程、网络原理基础组件&#xff0c;20个。中间件 Redis ,MySQL&#xff0c;Kafka&#xff0c;RPC&#xff0c;Nginx开源框架&#xff08;解决方案&#xff09;业务开发(工程师开发&am…