Flask----目录结构
以此结构为例,这个小项目是《Flask Web开发:基于python的web应用开发实战》第一部分结束后的代码框架
第一层
有app、tests、migrations三个文件夹和config.py、manage.py两个py文件以及data-dev.sqlite、data-tests.sqlite两个sqlite数据库
app文件夹下主要写flask程序;
migrations 文件夹包含数据库迁移脚本;
tests文件夹下编写单元测试;
config.py用来存储配置
manage.py 用于启动程序以及其他的程序任务
data-dev.sqlite是程序运行时所用的数据库
data-tests.sqlite是单元测试所使用的数据库
app层
下面有main、static、templates三个文件夹以及__init__.py、email.py、models.py三个py文件
main文件夹用来保存蓝本,此文件夹下__inir__.py文件里面创建蓝本,( 蓝本和程序类似,也可以定义路由。不同的是,在蓝本中定义的路由处于休眠状态,直到蓝本注册到程序上后,路由才真正成为程序的一部分。)main文件夹下views.py用来保存程序的路由,errors.py用来处理错误,forms.py是存放表单定义
static存放静态文件
templates用来存放响应的html文件,mail子文件里面的用来保存发送邮件所需的.html和.txt文件
__inir__.py文件里面包含create_app()函数,已经app的各种初始化
email.py包含send_email()发送文件函数(异步)
models.py包含User和Role两个表定义
tests层
test_basics.py用来编写单元测试
应该还有一个venv文件夹用来包含虚拟环境和一个requirements.txt 文件,此文件列出了所有依赖包,便于在其他电脑中重新生成相同的虚拟环境
个人需掌握
config.py中含有一个基类Config定义,三个继承类定义DevlopmentConfig、TestingConfig、ProductionConfig和一个元组config
manage.py中含有app 创建,manage、migrate初始化,以及make_shell_context()函数在命令行获取上下文,避免频繁导入还有test()函数,用来测试。
app下__init__.py文件含有create_app()函数,部分代码有

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy() def create_app(config_name): #创建app
app = Flask(__name__)
app.config.from_object(config[config_name]) #将配置类中的配置导入程序
config[config_name].init_app(app)
bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app) from .main import main as main_blueprint #导入蓝本main
app.register_blueprint(main_blueprint) #在主程序中注册蓝本 return app

app.config.from_object(config[config_name]) 将配置类中的配置导入程序!!
在email中利用有这样一行代码
app = current_app._get_current_object()
current_app程序上下文!!!,理解有些模糊
在app/main/views下有一段代码比较重要

@main.route('/',methods = ['POST','GET']) #请求方式不管是post还是get都执行这个视图函数
def index():
form = NameForm() #表单实例
if form.validate_on_submit(): #提交按钮是否成功点击
# 从数据库中查找和表单数据一样的数据,如果有,取第一个数据
user = User.query.filter_by(username = form.name.data).first()
if user is None: #如果数据库中没有对应的数据
user = User(username = form.name.data) #在数据库中对应的表中创建数据
db.session.add(user) #加入到用户会话,以便数据库进行提交
session['known'] = False #这是一个新用户
if current_app.config['FLASKY_ADMIN']: #如果收件人已经定义,则调用发送邮件函数
send_email(current_app.config['FLASKY_ADMIN'],'New User','mail/new_user',user = user)
flash('The mail has been sent out')
else:
session['known'] = True #这是一个老用户
session['name'] = form.name.data #从表单获取数据
return redirect(url_for('.index'))
return render_template('index.html',current_time = datetime.utcnow(),
form = form,name=session.get('name'),known

Flask----目录结构的更多相关文章
- python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)
昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...
- Flask之目录结构
学习Flask,整合其目录结构也是比较重要的.一个最基础的Flask目录如下所示: 一.SQLAlchemy-utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchem ...
- Flask【第11篇】:整合Flask中的目录结构
整合Flask中的目录结构 一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import ...
- python基础之迭代器、装饰器、软件开发目录结构规范
生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大 ...
- Python之路-python(装饰器、生成器、迭代器、Json & pickle 数据序列化、软件目录结构规范)
装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能 原则: 1.不能修改被装饰的函数的源代码. 2.不 ...
- 小白的Python之路 day4 软件目录结构规范
软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同 ...
- Python-迭代器&生成器&装饰器&软件目录结构规范-Day5
目录Day-Python-迭代器&生成器 21.生成器 21.1.生成器引入 21.2.生成器作用 31.3.创建生成器的方法 31.4.用函数来实现复杂的生成器 51.5.把函数变成生成器通 ...
- 软件目录结构规范(以python为例)
为什么要设计好目录结构 "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人 ...
- 初学Python——软件目录结构规范
为什么要设计好目录结构? 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 可维护性高: 定义好组织 ...
- Django项目和Django初体验和创建、目录结构认识
.MVC的设计方式(跟Flask一样,都是MVC的设计模式) .开发效率高 .功能强大(丰富的第三方组件) .安全性高(帮助开发者规避安全漏洞) 目前市面上使用:Django>Flask #使用 ...
随机推荐
- centos7安装配置mysql5.6
1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2. 安装mysql-co ...
- MySQL查看当前的连接信息
1:查看当前有多少个连接 mysql> status; Threads: 4 2:查看连接的详细信息 mysql> SHOW FULL PROCESSLIST;
- 解决 Docker pull 出现的net/http: TLS handshake timeout 的一个办法
echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io\"&q ...
- [转]抛弃jQuery,使用原生JavaScript
原文链接 Document Ready 事件 在jQuery中,document.ready可以让代码在整个文档加载完毕之后执行: $(document).ready(function() { // ...
- iOS开发之Xcode9报错 Compiling IB documents for earlier than iOS7 is no longer supported.
升级到Xcode9时,最低的编译版本为iOS8,但是在使用一些SDK的时候就会报出Compiling IB documents for earlier than iOS7 is no longer s ...
- Mydumper介绍
Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具.开发人员主要来自MySQL,Facebook,SkySQL公司.目前已经在一些线上使用了Mydumper. 一.Myd ...
- linux备份数据mysql
到mysql安装目录下的bin: ./mysqldump -u root -p ebuy_mgt > /home/2017backup.sql
- 【转】Centos7安装nodejs
下载及安装步骤: cd /usr/local wget https://nodejs.org/dist/v8.11.2/node-v8.11.2-linux-x64.tar.xz tar xvf no ...
- wrk压测工具使用
介绍分为四部分 1.wrk简述 2.wrk安装 3.wrk运行参数 4.wrk高级用法 1.wrk简述 当使用ab做压测的时候发现,ab的客户端消耗很大,而且测试时性能较差,测试redis,sprin ...
- js实现选中文字 分享功能
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...