Flask框架

https://github.com/pallets/flask

上节我们讲了两种提供Web服务的方式,分别是一:直接通过socket来处理http请求; 二:通过实现WSGI Application部分的协议。

基于这两种方式我们完全可以自己写一个框架,或者抛开框架来实现自己的Web服务。从实现的角度来说,没有任何问题。但是考虑到我们已经进入现代化阶段,通过原始的方式除了增加我们的开发成本之外没有任何益处。我们需要更完善的脚手架帮我们把项目结构搭出来、封装好HTTP协议、处理session和cookie等等内容,让我们能够更加专注在项目有本身的业务。

入门推荐

在Python中微型框架的选择有很多,比如web.py,bottle。但是如果让我给新手推荐一个易上手的框架的话,我会建议他先用下Flask。原因很简单,所有微型框架的特点就是小,只提供核心能力,这意味着很容易上手,很容易掌握。但是在此之后呢?无论是从文档还是第三方插件的发展来看,Flask都要优于其他微框架。这也意味着上手Flask之后,除了写一个入门的Demo页,你可以学习/实践更多的东西。

不过对于正经的做业务开发,我们不能只考虑入门难度,毕竟大家都是专业的程序员。我们考虑更多的还是我第一节中说到的:

  • 所选语言或者框架或者数据库是否应用广泛,有比较好的社区支持,以及大量的用户反馈。
  • 语言/框架/数据库所提供的能力(功能)是否能够契合业务的需要,从而减少重复的造轮子的工作量。
  • 自己团队的成员是否熟悉该框架和数据库,是否有人能够掌控开始使用框架之后遇到的所有问题。

作为微型框架来说, Flask是很受关注的一个,这点从github的star数也可窥得一斑。另外也可以在Github上看Flask的更新频率,issues和Pull Request的数量,以及对issues和Pull Request的处理速度。这些都能够看出这个框架的受欢迎程度以及活跃程度。

Flask内置功能

Flask定位是微型框架,这意味着它的目标就是给你提供一个Web开发的核心支持。如果你需要其他的功能,你可以使用第三方插件,甚至可以自己写一个插件。

我们先看下Flask本身所提供的功能。

  • built-in development server and debugger(内置的开发server和debug模块)
  • integrated unit testing support(集成的单元测试的支持)
  • RESTful request dispatching(RESTful风格的请求分发机制)
  • uses Jinja2 templating(默认使用Jinja2模板)
  • support for secure cookies (client side sessions)(安全cookie的支持,用作客户端会话)
  • 100% WSGI 1.0 compliant(100%兼容WSGI 1.0协议)
  • Unicode based(基于Unicode)
  • extensively documented(良好的文档)

基本的Web开发能力已经都有了,这符合它的定位。因此并没有提供数据库相关的功能,比如ORM,比如权限控制。这么做的好处就是你可以选择自己熟悉的ORM工具,但是要求你有足够的能力来掌握其他工具。

匹配需求

有了上面的了解之后,我们可以再来回顾下我们的需求,如果用flask来发开的话需我们自己在框架之外做些什么?

  • ORM工具,你可以选择SQLALchemy,或者PonyORM或者Peewee
  • ORM跟Flask集成到一起的插件,当然你可以自己写
  • admin界面开发,可以选择第三方的flask-admin
  • 用第三方的flask-admin之后,你需要自己控制后台权限
  • 等等

对于微型框架来说,我们的诉求并不多。但是对于我们需要实现的业务来说,如果我们选择微型框架,意味着我们需要写更多的代码,去攒更多的插件,这其实是对Python能力的考验。

从另外一个层面来说,微框架给开发者提供了很好的灵活性,没有太多的约束,这导致的一个问题是“一千个开发者,就有一千种使用微框架的方式”。

总结

关于flask我没有太多的实践经验,上面的那些仅供参考。

但是对于微框架,我个人的看法是,如果开发者能力足够强,微框架很适合,不会约束你。但是你需要考虑团队协作,需要定好统一的规范。

如果能力比较弱,微框架就无法给你提供更多的帮助。比方说,你可以选择任意一个ORM框架来跟Flask结合。那么对于一个初学者来说,选择哪个ORM框架?确实有多个选择,但是有句话叫:Too Choices Means No Choices。这种场景下,新手可能不知道应该怎么做。

不过总的来说,对于简单的需求,或者不是很复杂的项目,可以使用Flask,利用它的轻量的优势。

results matching ""

    No results matching ""