最近做个简单的MIS系统, 趁机读《flask web 开发实战 入门、进阶与原理解析》 李辉。  由于是flask官方团队的人写的。方方面面都很细致。

很多写法、配置,和之前0.X时代也有了不同。正好整理一下。

打破书里的顺序,把自己不熟的地方摘记出来,随写随改。

因为我现在都是前后分离的写法了,所以涉及template, form的知识点就略过了。

感觉需要注意的点有些琐碎。或者说自己之前学的也都是一鳞半爪,结果到处是洞。

所以按自己归纳的topic统一整理一下。

随着整理,也对框架的轻和重有了新的认识。

后端django和flask作为对比,前端angular和手工写页面作为对比。

——怎么说呢,各种琐碎细致的配置一顿搞下来。记忆学习负载肯定是大的。

1 轻量级的框架,开发起来记忆学习成本并不轻。

轻量级的框架,本身很"微",但是要配置到工作状态,其实要做大量配置工作。使用过程并不轻。

远比django这样的全家桶,开箱即用的框架,要麻烦些。(甚至从项目路径结构,文件名,blueprint名字,扩展如何引用,都要“学”+“按套路来”),这些都是成本

就好比,高手用轻剑,那是因为他内力高。低手如果要降低对撸代码的恐惧,培养兴趣,无脑出活,其实还是用6管斯特林 似的 全家桶框架更好。

2 轻量级框架付出更多“概念”成本,是为了换来灵活性

为了全方位的可定制。类似《Unix编程艺术》里说的“从头到脚的灵活性”。——和unix一样,这对后端,尤其重要。

3 重型框架付出更多的“概念”成本,是为了换来同质性。

用angular这样的重型框架,也同样会学习不少概念。这样的目的是获得面向对象的好处:“一切XX皆可以按YY来操作”。

恰恰屏蔽掉了“部署平台”,等等的灵活性,交给框架了。

4 非核心域用重型框架,核心域用轻型框架

到底用什么框架,还是要根据

1工作本身特点

2 自己对自己工种、职业定位

2方面综合考虑。

从工作本身角度说:

1重型框架是通解;

2轻型框架是特解,有可能得到最优解;

所以:我的选择是:

非核心工作,用重型框架

重型框架的好处:撸代码容易,效率高,便于多人协作,千人一面(滥竽充数)。

重型框架的坏处:会更限制自己的思维到MVC或MVT 或MVXX...,而且有可能模糊业务层 写成强耦合 系统,参看 rails, django, phoenix,你们错了

但是是不是强耦合 要考发展阶段,项目复杂度是慢慢成长起来的。很多小项目,使用重型框架尽快搞出来,并没有问题。80%并没有机会真的继续演化成复杂项目。

当20%的项目真的有机会复杂起来,那时候重构不迟。可以M V C 分别用轻量框架定制开发。

这也属于“不要过早优化”了吧。

比如,我不是前端开发者,也不想往那个方向发展,那么前端写响应式页面,就用angular这样的重型框架。替我包办了N多细节,前端关心的那些边角问题不是我关系的核心问题(比如打包尺寸,响应时间之类的)。和我用u3d一样。

从个人角度说:

非个人兴趣方向,非自己的核心域,用重型框架和通解

自己的核心域,要尽量保证灵活性,也要尽量对自己提出高要求,

即使以重型框架入门,也不要满足,要及时切换到轻量框架,然后不断演化,不断折腾。

如果是针对业务建模与切分领域,那么后端web server 用flask是个很好的切入点。

因为py本身就是胶水,其他语言实现的领域模型,都可以在这里粘合中转,那么flask的灵活性确实就是必要的。

现在仅仅把flask当 rest api 来用。配合nodejs写gateway,实现领域逻辑的分解。

而前端页面用angular,能实现相当的controller工作+全部的view工作。还是很好用的。

未分类

flask并不是mvc框架

,没有内置数据模型。P25

flask的view 相当于Controller function

jinja2的html template  相当于MVC的View

SQLAlchemy 相当于 Model

一、配置与启动

1用 flask run启动。 P14

而不是 在 app.py里

if __name__ == '__main__':
  app.run()

flask会自动发现app.py和wsgi.py 从中寻找app或者application变量。

使用其他模块名,则需要设置环境变量,因为我只使用app.py,所以不管其他。

P18

flask run --host=0.0.0.0  --port=8000

也可以写在环境变量里

FLASK_RUN_HOST

FLASK_RUN_PORT

2 环境变量管理 P16

安装python-dotenv。然后用.env文件管理环境变量

.flaskenv管理敏感信息,不提交的git仓库。所以要把.flaskenv添加到.gitignore里

3 多种环境区分 P18

FLASK_ENV 默认 production  开发是可以设置为development。开启开发特性

默认是:

$ flask run
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

改成dev后是:

$ flask run
* Environment: development
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 824-830-318
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

这才是原来熟悉的debug模式, 修改代码会自动reload

二、结构组织,blueprint

三、db以及初始化

读狼书,重温flask的更多相关文章

  1. 【转】C++后台开发应该读的书

    转载自http://www.cnblogs.com/balloonwj/articles/9094905.html 作者 左雪菲 根据我的经验来谈一谈,先介绍一下我的情况,坐标上海,后台开发(也带团队 ...

  2. 狗书(flask基础)

    为什么选择使用flask? 和其他框架相比, Flask 之所以能脱颖而出,原因在于它让开发者做主,使其能对程序具有全面的创意控制. 在 Flask 中,你可以自主选择程序的组件,如果找不到合适的,还 ...

  3. 关于狗书《Flask web开发 基于python的Web开发应用实战》中加入用户隐私功能

    目前是第二次撸狗书,在用户页面这一块我个人觉得有些问题(基于交互设计).按理来说,我作为一个权限只有User的个人用户来说,肯定不喜欢让别人看到我的真实姓名,地址之类的敏感信息.所以我应该是可以设置成 ...

  4. AI 经典书单 | 人工智能学习该读哪些书

    转载 2018年01月16日 00:00:00   人工智能相关岗位中,涉及到的内容包含: 算法.深度学习.机器学习.自然语言处理.数据结构.Tensorflow.Python .数据挖掘.搜索开发. ...

  5. 学习 C++ 读什么书

    C++ 看什么书? 很多莘莘学子,想要在这条路上前进,却是踽踽独行,摸不到门路.就像我当初是一样的.在没有一个前辈带路的情况下,想要自己一个人摸索前进,那份迷茫,深深的刻进自己的记忆里.     下面 ...

  6. 用git管理自己读的书

    福昕阅读器,可以方便地做书签和备注.使用git去管理图书和示例代码,一方面能够很好地保存这些资料,方便查找:另外一方面,无论在家,还是在公司,都能很好地同步自己学习的进度. 福昕阅读器5(视图--&g ...

  7. 1.关于狗书《Flask Web开发 基于Python的web开发应用实战》身份验证的改进

    在我学习用户身份验证的时候,我发现这里有个小弊端,在用户注册完成后想要验证邮箱的时候,点击邮箱中的网址进行验证,此时还要登陆,这及其不符合我们的习惯.一般情况下我们只需要点击网址就可以验证成功并且进入 ...

  8. 【读书】PHP程序员要读的书目(不断完善中)

    本文地址 分享提纲: 1. PHP 2. Linux 3. Apache/Nginx 4. Mysql 5.设计模式/架构 6. 缓存并发 7. 其他语言 8. 代码基础 9. 大前端 10. 管理生 ...

  9. [No000060]冷读热读:读书九问

    兵无常势,水无常形,读书亦无法.彼之砒霜,我之佳肴.然读书无法却有道.你我都是使用同一颗大脑在读书.这颗大脑受制于那千千万万年以来,星辰起落,狩猎采集,演化大道. Q1:读物如何分级? 坏书.可用的书 ...

随机推荐

  1. python 类(3) property

    class PetCat(): """ 家猫类""" def __init__(self, name, age): self.name = ...

  2. python — 进程

    目录 1. 进程 1.进程就是一个运行中的程序(是对正在运行程序的一个抽象). 2.程序和进程之间的区别: 程序只是一个文件 进程是这个文件被CPU运行起来了 程序是永久的,进程是暂时的. 3.进程- ...

  3. Autofac通过配置的方式

    autofac是比较简单易用的IOC容器.下面我们展示如何通过json配置文件,来进行控制反转. 需要用到以下程序集.可以通过nugget分别安装 Microsoft.Extensions.Confi ...

  4. 帝国cms列表内容模板加上数字编号

    /*这个[!--no.num--]指的是信息编号.每次增加1*/ <li data-eq="[!--no.num--]"> <div class="ti ...

  5. 使用flex布局解决百分比高度元素垂直居中

    方法一: align-self(解决父元素下面单个子元素布局方式) 父级加上 div{display:flex} 子元素 span { flex-grow: 1; align-self: center ...

  6. 9 java 笔记

    1 所有的java对象都可以和字符串进行连接运算 2 在java中判断两个变量是否相等时:==运算符适用于基本类型的判断 3 JVM常量池保证相同的字符串直接量只有一个,不会产生多个相同的副本 4 O ...

  7. 【转】awk学习笔记

    Awk学习笔记 整理:Jims of 肥肥世家 <jims.yang@gmail.com> Copyright © 2004 本文遵从GPL协议,欢迎转载.修改.散布. 第一次发布时间:2 ...

  8. NORDIC GATT事件

    假设有两个服务,每个服务注册相应事件 注册的事件为ble_dev_cfg_on_ble_evt.ble_lora_cfg_on_ble_evt 当在任何一个服务中发生GATT特征读或写的时候,注册的这 ...

  9. C++中虚函数的作用和虚函数的工作原理

    1 C++中虚函数的作用和多态 虚函数: 实现类的多态性 关键字:虚函数:虚函数的作用:多态性:多态公有继承:动态联编 C++中的虚函数的作用主要是实现了多态的机制.基类定义虚函数,子类可以重写该函数 ...

  10. python基础编程: 函数示例、装饰器、模块、内置函数

    目录: 函数示例 装饰器 模块 内置函数 一.函数示例: 1.为什么使用函数之模块化程序设计: 不使用模块程序设计的缺点: 1.体系结构不清晰,可主读性差: 2.可扩展性差: 3.程序冗长: 2.定义 ...