基于Flask,构建自己的Web框架

Flask是一个使用Python编写的轻量级Web应用框架,因为它强大的自由性,从推出开始就受到大家的热捧,在官方文档和其他介绍Flask的文章中,你一定没少看到下面的代码

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

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

简单的几行就获得了一个可运行的web应用,这让新手入门变得非常简单。但是,随着系统复杂度的上升,单个文件已经无法满足需求,于是出现了所谓的大型应用架构:

|-flasky
  |-app/
    |-templates/
    |-static/
    |-main/
      |-__init__.py
      |-errors.py
      |-forms.py
      |-views.py
    |-__init__.py
    |-email.py
    |-models.py
  |-migrations/
  |-tests/
    |-__init__.py
    |-test*.py
  |-venv/
  |-requirements.txt

对于不是特别复杂的系统,可以采用如上的模式开发,但实际情况是,我们通常所面对的业务要复杂的多,这样就无法把所有模型都放在同一个models.py文件中,同理,views.pyforms.py也是如此。除了代码结构,还有其他的一些因素需要考虑,例如:如何记录日志,如何处理错误信息等等,只要我们使用Flask,就不得不一遍遍的去做这样的事情。对于一个框架来说,开发人员应该不用去关注框架本身,而是将精力全部集中到业务实现。因此,我决定基于Flask来封装自己的web框架(Github),而这个框架在很大程度上参考了How I Structure My Flask Applications 这篇博客。

封装后的Web框架的结构如下:

.
├── README.md
├── app
│   ├── __init__.py
│   ├── controllers
│   ├── forms
│   ├── models
│   ├── services
│   ├── core.py
│   ├── exceptions.py
│   ├── extensions.py
│   └── factory.py
├── config
│   ├── __init__.py
│   ├── settings.dev.py
│   ├── settings.pro.py
│   └── settings.py
├── logs
│   └── dev.log
├── manage.py
├── public
├── requirements
│   ├── dev.txt
│   └── pro.txt
├── utils
└── venv

之所以这样安排目录结构,是考虑到有些同学可能是从PHP或Java转移过来的,他们还是比较熟悉按层来划分模块,而不是根据功能来划分。在使用的时候,只需要在对应的模块中添加业务代码,真正做到了开箱即用。更详细的信息大家看代码吧,地址如下:
https://github.com/iszhenyu/fiji
也欢迎大家一起交流。

《基于Flask,构建自己的Web框架》 这样学机器学习

    原文作者:iszhenyu
    原文地址: https://www.jianshu.com/p/79095860e76d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞