Python 笔记五:Flask的N种可能性

作者: brandonxiang | 来源:发表于2016-02-03 11:02 被阅读5073次

    Python 笔记五:Flask的N种可能性

    其实,Flask框架教程太多,我不能把所有功能都写一遍,也没有意义。我也不是计算机出身,写得也没他们好。所以这个笔记从我自己角度出发,有不同意见请留言

    详情awesome-flask

    图片来自 [官网](http://dormousehole.readthedocs.io/en/latest/)

    从我自己的角度出发,我希望一个微框架,很容易上手。Django明显不合适,Tornado虽然好,但是要造轮子,所以还是适合一些纯计算机大神使用。我们不太适合。

    可能一:传统Flask

    入门教程可以参考被翻译的Flask教程英文原文,这是一个很基础的教程,运用了一些官配的控件,其中包括jinja模板,sqlalchemy的ORM:

    • flask 主体
    • flask-login 登陆验证
    • flask-openid 第三方openID验证
    • flask-mail 发送Email
    • flask-sqlalchemy 官配ORM
    • sqlalchemy-migrate 数据库迁移
    • flask-whooshalchemy
    • flask-wtf web表单
    • flask-babel JS新语法兼容库
    • flup python写的Web Server

    这个教程也有它的局限性,太老了。结合现在的Web趋势,大家对Jquery和模板前段框架越来越不重视,更多是Angular等MVVM框架加上Rest服务的后端。所以我的聚焦点在Flask的扩展多,适合超快速开发,和GIS不谋而合的特点,我更推荐下面一种方式。

    可能二:Flask和Angular结合

    运用AngularJS和Flask-Restful的组合,可以参考generator-angular-flask

    安装

    和一般Yeoman的generator一样,首先我们安装Yeoman:

    npm install -g yo

    然后安装generator:

    npm install -g generator-angular-flask

    安装完毕,这时候可以构建项目可以输入yo然后选择,或者直接输入

    yo angular-flask

    然后创建一个虚拟环境python virtualenv.py,安装python的包,./install.sh for linux install.sh for windows,然后就可以正式开工。

    入门

    创建一个实体

    yo angular-flask:entity [myentity]

    同样数据库的创建,迁移,升级和降级可以通过db_create.pydb_migrate.pydb_upgrade.pydb_downgrade.py来完成。

    服务端 flask/bin/python run.py for Linux flask/scripts/python run.py for Windows

    客户端 grunt server

    参考angular-flask的Github项目

    可能三:Flask和Vue.js结合

    几经周折,我看上了Vue.js的这MVVM框架。由于它轻量易用,上手极快,结合了Angular和React的一些优点,如果你懂得Angular,想上手Vue.js是很轻松的一件事。而且Vue.js是个中国人写的,我对其产生一种特别的好感,轻量级的解耦的选择可以说,和flask框架之间有一种特殊的共同点。

    这里举一个github的例子基于Vue和Flask的免准考证四六级成绩查询,这个例子简洁明了,将flask作为一种rest服务,可以采用flask + gevent + gunicorn + nginx的部署方式。熟悉flask的同学一定知道,在初始化flask,即app = Flask(__name__)。通过解释器去分配对应的路由,路由中带有参数ticketusername,并将查询结果整理成为json输出。

    @app.route('/GetCetScore/<ticket>/<username>',methods=['POST','GET'])
    def get_cet_score(ticket, username):
        ct = CetTicket()
        try:
            result = ct.get_score(ticket, username)
            result['ticket'] = ticket
        except:
            result = {'Status': '0', 'Contact_us': 'wangyuan.info'}
        return jsonify(result)
    

    前端则是将每个页面组件化,把对应的的服务写在对应的组件当中。详情参考1简单入门2进阶[译]用Webpack构建Vue,可以参考我的Leaflet 笔记四:Vue-leaflet

    转载,请表明出处。总目录Awesome GIS

    转载,请表明出处。总目录后端记事本

    微信公众号

    相关文章

      网友评论

        本文标题:Python 笔记五:Flask的N种可能性

        本文链接:https://www.haomeiwen.com/subject/yyzjkttx.html