大飞

大飞 关注TA

挑战一切!

大飞

大飞

关注TA

挑战一切!

  •  世界的顶端
  • 混口饭吃
  • 写了333,609字

该文章投稿至Nemo社区   Python  板块 复制链接


python 三大框架Django tornado flask的对比

发布于 2018/11/15 17:22 1,907浏览 0回复 3,860

一.优缺点对比

   Django:

      优点:1.大而全,一身装备,可变形,可扩展

                2.自助管理后台

                3.强大的数据库访问组件

                4.完整的路由系统

    缺点:   1.高内聚,低耦合

              2.重量级

   Tornado:

     优点:1.高并发、高性能

               2.轻量级框架

               3.异步非阻塞

   缺点:灵活性不太好

  Flask:

    优点:1.轻量级框架

              2.灵活性大

              3.完善的官方文档

    缺点:开发大型网站整合成本高


二.适用范围

  Django:大型网站,快速开发

  Tornado:高并发网站

  Flask:小型网站

三:请求方式的区分

  Django:request.method == "GET" / "POST" 如下例子

    # 用户登录
    def user_login(request):
        if request.method == 'POST':
            json_result = json.loads(request.body)
            username = json_result.get('username')
            password = json_result.get('password')
           .....省略

        else:  # 其他请求方式
            return result_handler('请使用POST请求')

Tornado:重写父中RequestHandler的get/post/..的请求处理方法来实现不同的请求方式的区分,如下例子

class UserLogin(tornado.web.RequestHandler):
    def get(self):
        self.write(result_format(None, msg='此接口不支持GET请求'))

    def post(self, *args, **kwargs):
        json_result = json.loads(self.request.body)
        username = json_result.get('username')
        password = json_result.get('password')
       .... 省略

Flask:通过注解方式@app.route("/", methods=["get", "post"..]) 如下列子

@app.route('/',methods=['get'])
def hello_world():
    searchword = request.args.get('key', '')
    return 'Flask 项目创建  %s' % searchword


四:请求参数的接收

Django:request.GET/POST

Tornado:

        self.get_query_argument(key)/get_query_arguments(key)

        self.get_body_argument(key)/get_body_arguments(key)

        self.get_argument(key)/get_arguments(key)

Flask:

        request.args.get(key)

        request.form.get(key)

五:接口名称配置

    Django:在urls.py进行配置,如下:

 from django.contrib import admin
from django.urls import path
from user import views

from user.handle.user import UserHandler

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
    path('login', UserHandler.user_login),
    path('logout', UserHandler.login_out),
    path('userList', UserHandler.user_list),
    path('createAndEdit', UserHandler.createAndEdit),
    path('delete', UserHandler.delete_user)
]

 Tornado:注册handler

 app = tornado.web.Application(handlers=[
        (r"/login", UserLogin),
        (r"/userList", UserList),
        (r"/logout", UserLogout),
        (r'/createAndEdit', CreateUser),
        (r'/delete', UserDelete)
    ], debug=True)

   Flask:方法注解即可,@app.route('/',methods=['get']) 

五.启动方式

Django:运行命令Python manage.py runserver 

  或者配置启动命令


Tornado:tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=[
        (r"/login", UserLogin),
        (r"/userList", UserList),
        (r"/logout", UserLogout),
        (r'/createAndEdit', CreateUser),
        (r'/delete', UserDelete)
    ], debug=True)
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

Flask:app.run(port=8001)


from flask import Flask, request

app = Flask(__name__)
if __name__ == '__main__':
    app.debug = True
    app.run(port=8001)


源码参考:https://github.com/tzz2015/DTF

本文标签
 {{tag}}
点了个评