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
以上全是个人理解,初次接触,学艺不精
2016-08-29
flask 程序结构概括的更多相关文章
- Flask:程序结构
		在Flask中需要配置各种各样的参数.比如设置秘钥,比如上一章介绍到的配置数据库类型. app.config['SECRET_KEY']=os.urandom(20) app.config['SQLA ... 
- Celery 与 Flask 大型程序结构的结合
		:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ... 
- Flask 程序的基本结构
		1.初始化 所有Flask程序都必须创建一个程序实例.web服务器使用一种名为Web服务器网关借口的协议,把接收自客户端的所有请求都转交给这个对象处理. from flask import Flask ... 
- 一个比较良好的flask项目结构
		一个比较良好的flask项目结构 project/ app/ # 整个程序的包目录 static/ # 静态资源文件 js/ ... 
- 谈谈.net模块依赖关系及程序结构
		技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ... 
- 【C语言入门教程】1.1 基本程序结构
		基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ... 
- C++程序结构---1
		C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ... 
- ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构
		APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ... 
- MFC单文档程序结构
		MFC单文档程序结构三方面: Doc MainFrame View 
随机推荐
- FIO是测试IOPS
			FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, ... 
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布
			(新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ... 
- django使用gmail
			POSTED ON 02 JUL 2007 IN DEVELOPMENT DJANGO PYTHON WEBDid a bit of running around today to get Djang ... 
- 拼linq 时网上整理的一个类
			public static class DynamicLinqExpressions { public static Expression<Func<T, bool>> Tru ... 
- Android组件间交互
			四大组件相信大家都不陌生了吧,今天咱们就组件间通信做个说明: 首先: 主要今天的目的是为了说明Android 提供的一个ResultReceiver类,这个类相信大家都不陌生吧>?但是你们层深入 ... 
- Python数据
			读取文件中数据的最高分数 highest_score=0 result_f=open("results.txt") for line in result_f: (name,scor ... 
- JSP-10-JSTL标准标签库
			JSTL (jsp 标准标签库) 包含用于编写和开发JSP页面的一组标准标签,它可为用户提供一个无脚本的环境. JSTL 提供了4个主要的标签库: 核心标签库.国际化(I18N)与格式化标签库.XML ... 
- html5,进度条
			<form action="" id="myform"> <progress value="20" max= ... 
- mybatis代码生成(generator工具生成代码)
			generator工具生成代码 下载地址 http://pan.baidu.com/s/1bY8C0I 
- oracle分区提高篇
			一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Or ... 
