zoukankan      html  css  js  c++  java
  • 读狼书,重温flask

    最近做个简单的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以及初始化

  • 相关阅读:
    debian 降级
    linux 常用查看设备命令
    viewstate
    linux图形界面编程基本知识
    Java 不适合编写桌面应用
    temp
    ASP.NET中26个常用性能优化方法
    三层架构与MVC的关系
    分页查询前台HTML+后台asp.net代码
    windows身份验证登入数据库 iis 无法访问数据库
  • 原文地址:https://www.cnblogs.com/xuanmanstein/p/11732183.html
Copyright © 2011-2022 走看看