当前位置: 首页 > news >正文

Flask学习之项目搭建

一、项目基本结构

1、 exts.py

存在的目的:在Python中,如果两个或更多模块(文件)相互导入对方,就会形成导入循环。例如,模块A导入了模块B,同时模块B又导入了模块A,这就会导致导入循环。

比如在这个项目中如果在app.py 中定义db,在models.py中使用app.py 中的db,又在app.py 中使用models.py 中的ORM模型,这样就导致app.py 和models.py 互相引用。

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

2、 config.py

存放一些公共的配置信息,比如数据库信息,邮箱信息等

PORT = 3306
HOSTNAME = "127.0.0.1"
USERNAME = "root"
PASSWORD = 密码
DATABASE = 数据库名称
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False

4、view.py

编写视图相关的代码!!

from flask import Blueprint, render_templatebp = Blueprint('front', __name__, url_prefix='/')@bp.route('/')
def index():return render_template('front/index.html')

6、models.py

编写ORM模型

from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from exts import db
import shortuuid
import enumclass Gender(enum.Enum):MALE = 1FEMALE = 2SECRET = 3UNKNOW = 4class FrontUser(db.Model):__tablename__ = 'user'# 从安全角度考虑,前台用户id不能再使用自增长,id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)telephone = db.Column(db.String(100), unique=True, nullable=False)username = db.Column(db.String(20), nullable=False)_password = db.Column(db.String(200), nullable=False)email = db.Column(db.String(50), unique=True)realname = db.Column(db.String(50))avatar = db.Column(db.String(100))signature = db.Column(db.String(200))gender = db.Column(db.Enum(Gender), default=Gender.UNKNOW)join_time = db.Column(db.DateTime, default=datetime.now)# 所以需要重写__init__构造函数,将password的值取出def __int__(self, *args, **kwargs):if "password" in kwargs:self.password = kwargs.get('password')kwargs.pop("password")super(FrontUser, self).__init__(*args, **kwargs)@propertydef password(self):return self._password@password.setterdef password(self, row_password):self._password = generate_password_hash(row_password)def check_password(self, row_password):return check_password_hash(self.password, row_password)​

7、form.py

存放该项目中的后台数据验证

class LoginForm(BaseForm):telephone = StringField(validators=[Regexp(r"^1[34789]\d{9}", message="手机号码格式错误!")])password = StringField(validators=[Regexp(r"^[0-9a-zA-Z_\.]{6,20}$", message="密码必须是由6-20位数字、字母组成。")])remember = IntegerField()

8、manage.py

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from exts import db
from app import create_app
from apps.front import models as front_modelsFrontUser = front_models.FrontUser
app = create_app()
manager = Manager(app)
Migrate(app, db)
manager.add_command('db', MigrateCommand)# 前台用户
@manager.option('-t', '--telephone', dest='telephone')
@manager.option('-p', '--password', dest='password')
@manager.option('-u', '--username', dest='username')
def create_front_user(telephone, password, username):font_user = FrontUser(telephone=telephone, password=password, username=username)db.session.add(font_user)db.session.commit()if __name__ == '__main__':manager.run()

3、app.py

from flask import Flask
from exts import db
from apps.front.views import bp as front_bp
import configdef create_app():app = Flask(__name__)app.config.from_object(config)db.init_app(app)app.register_blueprint(front_bp)return appif __name__ == '__main__':app = create_app()app.run()

二、将ORM映射到数据库中

  1. 初始化迁移文件     python manage.py db init
  2. 将模型的映射添加到文件中  python manage.py db migrate
  3. 将映射文件真正的映射到数据库中 python manage.py db upgrade

三、通过指令创建用户

 python manage.py create_front_user -t '18828361988' -p '12345678' -u '嘻嘻哈哈'

运行结果:

四、前端视图显示

通过访问 http://127.0.0.1:5000/ 链接即可

相关文章:

Flask学习之项目搭建

一、项目基本结构 1、 exts.py 存在的目的:在Python中,如果两个或更多模块(文件)相互导入对方,就会形成导入循环。例如,模块A导入了模块B,同时模块B又导入了模块A,这就会导致导入循环。 比如在这个项目中…...

**CentOS7安装Maven**

CentOS7安装Maven 首先先解压压缩包apache-maven-3.9.9-bin.tar.gz tar -xvf apache-maven-3.9.9-bin.tar.gz解压完毕后配置环境变量 vim /etc/profile在环境变量配置文件中加入这句话 #Maven export MAVEN_HOME/opt/soft/maven362 //换成自己的路径 export PATH$PATH:$JAVA…...

(undone) MIT6.824 Lecture1 笔记

参考1MIT课程视频:https://www.bilibili.com/video/BV16f4y1z7kn/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 参考2某大佬笔记:https://ashiamd.github.io/docsify-notes/#/study/%E5%88%86%E5%B8%83%…...

小白投资理财 - 开篇

小白投资理财 - 开篇 第一健身第二提升工作技能第三理财自律和规划 我认为的人生三件大事值得投资,一是强身健体,有个好身体;二是提升工作技能,不断学习工作领域里的新知识;三是投资理财,确保资产不贬值。 …...

高中还来得及选择信息学奥赛赛道吗?

随着信息学奥赛(NOI)在升学中的重要性日益凸显,越来越多的学生和家长将其视为进入顶尖高校的一个重要途径。然而,很多学生可能直到高中阶段才意识到信息学奥赛的重要性,或者才开始对编程产生兴趣。于是问题出现了&…...

01_OpenCV图片读取与展示

import cv2 img cv2.imread(夕阳.jpg, 1) #cv2.imshow(image, img) #此行只能命令行处py文件执行,会弹出一个视频窗口 #cv2.waitKey (0)以下会在jupyter Lab控件中显示读取的图像 #bgr8转jpeg格式 import enum import cv2def bgr8_to_jpeg(value, quality75):ret…...

C语言中的输入控制重要基础

在C语言编程中,处理输入数据是一个常见的任务。根据不同的情况,我们可以采用不同的输入控制方法。本文将介绍三类输入控制方式,分别是已知数据组数的输入、以特定符号结束的输入,以及以EOF结束的输入。 1. 已知数据组数的输入 在…...

Vue 学习

使用 vue 创建一个项目 检查是否已经安装了 npm 和 node npm --version node --version 使用 npm 安装 vue npm install -g vue/cli 检查 vue 工具是否安装成功 vue --version 使用 vue 工具创建一个名为 vue-router-syntax 的项目 这是命令行的创建方式 vue create vu…...

Redis集群的两种方式

1.Redis集群 1.1 搭建主从集群 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写的分离。一般情况下,主节点负责写操作,从节点负责读操作。而从节点如何得知数据呢&#xff…...

QT--基础

将默认提供的程序都注释上意义 0101.pro QT core gui #QT表示要引入的类库 core:核心库 gui:图形化界面库 #如果要使用其他库类中的相关函数,则需要加对应的库类后,才能使用 greaterThan(QT_MAJOR_VERSION, 4): QT wid…...

一、前后端分离及drf的概念

1.1什么是前后端分离 程序角度 前后端不分离:一个程序(如django),接收请求处理HTML模版用户返回 前后端分离:两个程序 --前端:vue.js/react.js/angular.js --后端:Django drf(django rest framework) 2.专业角度 --…...

AI垃圾溢出识别摄像机

随着城市化进程的加快,垃圾处理成为城市管理中的一项重要工作。然而,垃圾桶溢出现象经常发生,给城市环境卫生和市民生活带来不便。为了解决这一问题,AI垃圾溢出识别摄像机 应运而生,利用人工智能技术,实现对…...

【抽代复习笔记】29-群(二十三):生成子群的两道例题及子群陪集的定义

例1:取S3的子集S {(12),(123)},S的生成子群包含哪些元?一个群的两个不同的子集会不会生成相同的子群? 解:(1)S的生成子群就是S3。证明[有不理解之处可以回头看看第27篇笔记中生成子群的定…...

安全防护装备检测系统源码分享

安全防护装备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…...

easyexcel常见问题分析

文章目录 一、读取数字多了很多小数位的精度问题 一、读取数字多了很多小数位的精度问题 浮点型转成BigDecimal的时候会出现精度问题,例如 这儿设置的实体类对象类型是String,默认用到的是StringNumberConverter转换器 2.1.4 版本 public class Strin…...

精通推荐算法31:行为序列建模之ETA — 基于SimHash实现检索索引在线化

1 行为序列建模总体架构 2 SIM模型的不足和为什么需要ETA模型 SIM实现了长周期行为序列的在线建模,其GSU检索单元居功至伟。但不论Hard-search还是Soft-search,都存在如下不足: GSU检索的目标与主模型不一致。Hard-search通过类目属性来筛选…...

Python知识点:如何使用Python进行卫星数据分析

开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 如何使用Python进行卫星数据分析 卫星数据分析是地球观测领域的一项关键技术&a…...

Python实现Phong着色模型算法

目录 使用Python实现Phong着色模型算法引言Phong着色模型的基本原理1. 模型组成2. 公式 Phong着色模型的Python实现1. 向量类的实现2. 光源类的实现3. 材质类的实现4. Phong着色器类的实现 整体实现总结 使用Python实现Phong着色模型算法 引言 在计算机图形学中,光…...

异步框架 fastapi -- 连接mysql数据库

文章目录 docker部署mysqlfastapi连接mysql docker部署mysql 拉取mysql镜像 # 查看docker 服务状态 systemctl status docker systemctl start docker # 设置 开机启动 systemctl enable docker# 拉取mysql 镜像 docker search mysql:latest # 不指定版本时,默认…...

Spring 全家桶使用教程 —— 后端开发从入门到精通

Spring 全家桶是 Java 后端开发的利器,提供了从基础开发到复杂微服务架构的一整套解决方案。通过对各个 Spring 组件的掌握,开发者可以快速构建高效、稳定的企业级应用。本文将详细介绍 Spring 全家桶的各个组件,帮助开发者深入理解其核心功能…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【机器视觉】单目测距——运动结构恢复

ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛&#xf…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

windows系统MySQL安装文档

概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...