以此结构为例,这个小项目是《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()函数,部分代码有

  1. bootstrap = Bootstrap()
  2. mail = Mail()
  3. moment = Moment()
  4. db = SQLAlchemy()
  5.  
  6. def create_app(config_name): #创建app
  7. app = Flask(__name__)
  8. app.config.from_object(config[config_name]) #将配置类中的配置导入程序
  9. config[config_name].init_app(app)
  10. bootstrap.init_app(app)
  11. mail.init_app(app)
  12. moment.init_app(app)
  13. db.init_app(app)
  14.  
  15. from .main import main as main_blueprint #导入蓝本main
  16. app.register_blueprint(main_blueprint) #在主程序中注册蓝本
  17.  
  18. return app

app.config.from_object(config[config_name]) 将配置类中的配置导入程序!!

在email中利用有这样一行代码

  1. app = current_app._get_current_object()

 current_app程序上下文!!!,理解有些模糊

在app/main/views下有一段代码比较重要

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

以上全是个人理解,初次接触,学艺不精

2016-08-29

 

flask 程序结构概括的更多相关文章

  1. Flask:程序结构

    在Flask中需要配置各种各样的参数.比如设置秘钥,比如上一章介绍到的配置数据库类型. app.config['SECRET_KEY']=os.urandom(20) app.config['SQLA ...

  2. Celery 与 Flask 大型程序结构的结合

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  3. Flask 程序的基本结构

    1.初始化 所有Flask程序都必须创建一个程序实例.web服务器使用一种名为Web服务器网关借口的协议,把接收自客户端的所有请求都转交给这个对象处理. from flask import Flask ...

  4. 一个比较良好的flask项目结构

    一个比较良好的flask项目结构 project/ app/                    # 整个程序的包目录 static/                 # 静态资源文件 js/    ...

  5. 谈谈.net模块依赖关系及程序结构

    技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ...

  6. 【C语言入门教程】1.1 基本程序结构

    基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...

  7. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  8. ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构

    APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ...

  9. MFC单文档程序结构

    MFC单文档程序结构三方面: Doc MainFrame View

随机推荐

  1. JSTL定制标签 - 递归标签显示属性结构

  2. iOS,第三方库使用

    1.ASIHttpRequest网络请求库 2.MBProgressHUD指示层库 3.Toast+UIView提示库 4.SDWebImage图片缓存库 5.MGSwipeTableCell单元格侧 ...

  3. 面向对象php基本格式、构造、析构、访问修饰符

    <?php//面向对象//1.类//由众多的对象抽象出来的 //2.对象//一切皆对象//由类实例化出来的 //基本形式class 类名{ 成员变量 成员方法 } $对象名 =new 类名 $对 ...

  4. 创建XMLHttpRequest对象方法

    ~~~ //创建XMLHttpRequest对象 function creatXmlHttpRequest() { var xmlHttp; try{ //非IE浏览器使用 xmlHttp = new ...

  5. ucos 学习

    1.UCOSII 早期版本只支持 64 个任务,但是从 2.80 版本开始,支持任务数提高到 255 个,不过对我们来说一般 64 个任务都是足够多了,一般很难用到这么多个任务. UCOSII 保留了 ...

  6. Leetcode: Can I Win

    In the "100 game," two players take turns adding, to a running total, any integer from 1.. ...

  7. 教你快速高效接入SDK——总体思路和架构

    题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢, ...

  8. 批处理命令——set

    [1]set命令简介 set,设置. [2]set命令使用 1. 打印系统环境变量.set命令可以打印系统所有的环境变量信息. 应用示例:新建文本文件,命名为set_sys,修改文件类型为bat,用N ...

  9. Redis常见用法

    using ServiceStack.Redis;using System;using System.Collections.Generic;using System.Linq;using Syste ...

  10. Maven单元测试报告及测试覆盖率

     对junit单元测试的报告:类似这样的结果 ------------------------------------------------------- T E S T S ----------- ...