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/ 链接即可

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【第二十章:Sentosa_DSML社区版-机器学习之自动建模】

目录 20.1 自动回归 20.2 自动分类 20.3 自动聚类 20.4 AutoARIMA 20.5 自动数据准备 【第二十章:Sentosa_DSML社区版-机器学习之自动建模】 20.1 自动回归 1.算子介绍 为了方便用户在不了解每个具体回归算法原理,及每个算法参数设置具体含义的情…

Threejs绘制圆锥体

上一章节实现了胶囊体的绘制,这节来绘制圆锥体,圆锥体就是三角形旋转获得的,如上文一样,先要创建出基础的组件,包括场景,相机,灯光,渲染器。代码如下: initScene() {this…

[Linux]从零开始的Minecraft服务器搭建教程

一、前言 学习Linux有一段时间了,当然,我们要把学习的知识运用到实际生活中去。最近朋友们都在玩我的世界,网易版的我的世界联机非常不稳定,用起来也算是非常难受了。所以还是准备转战JAVA版。为了联机,可以考虑一个人…

HBase DDL操作代码汇总(namespace+table CRUD操作)

HBase DDL操作 DDL操作主要是关于命名空间和表格的内容增删改查。 注:如果出现无法连接到zookeeper等的相关错误,可以将以下代码打jar包,在HMaster节点上执行 错误提示: Exception in thread “main” java.net.SocketTimeoutExc…

DVWA 靶场环境搭建

作者:程序那点事儿 日期:2024/09/15 09:30 什么是DVWA: 是OWSASP官方编写的PHP网站,包含了各种网站常见漏洞(漏洞靶场),可以学习攻击及修复方式。 PHP环境包含了,Windows/Apache/Mysql/Php g…

公安局软件管理平台建设方案和必要性,论文-2-———未来之窗行业应用跨平台架构

一、平台方略 随着gov信息化建设的不断推进,各类ZW软件的应用需求日益增加。为了提高ZW软件的获取便利性、AQ性和规范性,建设一个专门的GOV软件管理平台具有重要意义。 集中提供各类ZW软件,方便工作人员快速获取和安装,减少因软…

开放原子开源基金会OPENATOM

AtomGit_开放原子开源基金会代码托管平台-AtomGit 开放原子开源基金会是致力于推动全球开源事业发展的非营利机构,于 2020 年 6 月在北京成立,由阿里巴巴、百度、华为、浪潮、360、腾讯、招商银行等多家龙头科技企业联合发起。 精选项目: 比…

IDEA:如何设置项目启动的JVM运行内存大小

IDEA版本不一样页面也不一样 -Xms20m -Xmx200m 其实在本地开发调试的时候不需要太大内存,如果测试性能建议放到运算服务器上面去跑~~~

Python 递归函数如何工作?如何防止递归调用过深导致栈溢出

递归是编程中的一个重要概念,尤其在 Python 中,递归函数可以使某些问题的解决变得更加简洁和优雅。尽管递归具有强大的表达能力,但如果不加以控制,递归调用过深可能会导致栈溢出。本文将深入探讨递归函数的工作原理,如…

android和ios双端应用性能的测试工具

1.工具介绍 基于日常工作的需要,开发了一款新的android和ios端应用性能测试工具,本工具在数据测试方面与所流行的工具没有区别。欢迎下载使用体验。 本工具为筋斗云,工具说明 本工具无侵入,不需要root,低延迟…

二叉树的基本概念(上)

文章目录 🍊自我介绍🍊简介🍊树的定义树中的专业术语树的分类 🍊二叉树的特性讲解 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介…

VisualStudio如何卸载Resharper插件?

本来按理说,卸载插件应该就是在扩展下的已安装插件中,找到该插件,点一下就会出现卸载的按钮的。 没想到这个Resharper这么吊,卸载按钮居然是个灰色的,意思就是此路不通,有特权的。 那么这种情况下&#x…

第68期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

Android studio安装问题及解决方案

Android studio安装问题及解决方案 gradle已经安装好了,但是每次就是找不到gradle的位置,每次要重新下载,很慢,每次都不成功 我尝试用安装android studio时自带的卸载程序,卸载android studio,然后重新下…

php发送邮箱教程:如何实现邮件发送功能?

php发送邮箱性能优化策略?怎么使用PHPMail发送邮箱? 无论是用户注册验证、密码重置,还是系统通知,邮件发送都是不可或缺的一部分。AokSend将详细介绍如何使用PHP实现邮件发送功能,帮助开发者快速掌握这一技能。 php发…

LeetCode从入门到超凡(三)回溯算法

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的LeetCode学习总结文档;本文主要讲解回溯算法。💕💕😊 介绍 回溯算法(Back…

使用 Nuxt Kit 的构建器 API 来扩展配置

title: 使用 Nuxt Kit 的构建器 API 来扩展配置 date: 2024/9/24 updated: 2024/9/24 author: cmdragon excerpt: 摘要:本文详细介绍了如何使用 Nuxt Kit 的构建器 API 来扩展和定制 Nuxt 3 项目的 webpack 和 Vite 构建配置,包括扩展Webpack和Vite配置、添加自定义插件、…

MySQL Performance Schema 详解及运行时配置优化

引言 MySQL 的 Performance Schema 是一套性能监控与诊断工具,帮助开发者和数据库管理员收集、分析 MySQL 实例的运行状态,找出性能瓶颈并进行优化。通过 Performance Schema,我们能够监控不同的内部事件、线程、会话、语句执行等关键性能指…

[单master节点k8s部署]24.构建EFK日志收集平台(三)

Kibana Kibana是elasticsearch的可视化界面。 首先创建kibana的服务,yaml文件如下。k8s里的服务分为四种,clusterIP为仅仅为pod分配k8s集群内部的一个虚拟ip,用于集群内的pod通信,而不对外暴露。elasticsearch的服务就是cluster…

编译原理3——词法分析

3.1词法分析器的作用 词法分析是编译的第一阶段。词法分析器的主要任务是读入源程序的输入字符、将它们组成词素,生成并输出一个词法单元序列,每个词法单元对应于一个词素。 但在这个过程中,词法分析器还要和语法分析器进行交互。交互&…