• Python Web:Django、Flask和FastAPI框架对比


    Django、Flask和FastAPI是Python Web框架中的三个主要代表。这些框架都有着各自的优点和缺点,适合不同类型和规模的应用程序。

    1. Django:
      Django是一个全功能的Web框架,它提供了很多内置的应用程序和工具,使得开发Web应用程序更加容易。Django采用了MTV(模型-模板-视图)设计模式,提供ORM等强大的功能,因此适合构建大型、复杂的Web应用程序,如社交网络或电子商务网站。Django的主要优点在于快速开发、自带管理后台、丰富的文档以及广泛的社区支持。但是,Django也很庞大,可能导致性能较低,并且学习曲线较陡峭。

    2. Flask:
      Flask是一个轻量级的Web框架,它没有像Django那样的内置应用程序和工具,因此适合用于小型Web应用程序和原型的快速开发。Flask框架非常灵活,易于扩展,而且学习曲线相对Django来说更加平滑。由于其轻量级特性,Flask可以很好地与其他Python库集成,如SQLAlchemy等。但是,相对于Django,Flask缺少某些功能,如ORM等。

    3. FastAPI:https://fastapi.tiangolo.com/zh
      FastAPI是一个较新的Web框架,它采用了异步编程模型和类型提示,性能非常出色。FastAPI支持OpenAPI(以前称为Swagger)规范,并提供自动生成API文档的功能。FastAPI易于使用、快速开发、高性能的特性使其成为开发高吞吐量API的首选框架。但是,由于其年轻的生态系统,FastAPI缺少一些Django和Flask所拥有的库和工具。

    在使用场景方面,Django适用于需要处理大量数据或实现复杂业务逻辑的应用程序,而Flask适用于小型应用程序或快速原型开发。FastAPI则适用于开发高吞吐量API和微服务。

    市场份额方面,据调查显示,2021年Django在全球Python Web框架中市场占有率最高,其次是Flask。FastAPI作为新兴框架,市场占有率尚不明确。

    未来趋势方面,三者都有其优点和优秀的社区支持,在不同领域的应用中仍然有着广泛的前景。但是,随着Python生态系统的不断壮大,可能会涌现更多的Web框架,这将影响三者的市场份额。

    以下是使用Django、Flask和FastAPI实现Hello World的代码:

    安装依赖

    requirements.txt

    # async web framework
    uvicorn==0.23.2
    fastapi==0.101.1
    
    # sync web framework
    Flask==2.3.2
    

    pip install -r requirements-sync.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

    创建一个HTML

    html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
    Hello VipSoft
    body>
    html>
    

    Flask Demo

    flask_demo.py

    #!/usr/bin/env python
    import logging
    import os
    
    from flask import Flask
    
    # 指定静态页面的地址
    app = Flask(__name__, static_url_path="/static/")
    
    port = int(os.getenv("PORT", 8080))
    
    # 启动后的首页,
    @app.route("/")
    def get_index():
        return app.send_static_file("index.html")
    
    
    # 使用@app.route装饰器定义了一个路由。在这个路由中,当浏览器请求/hello路径时,会执行名称为hello的函数并
    @app.route('/hello')
    def hello():
        return 'Hello, Flask!'
    
    
    # 启用时,指定端口 8080,其它默认
    if __name__ == "__main__":
        logging.root.setLevel(logging.INFO)
        logging.info("Starting on port %d ", port)
    
        app.run(port=port)
    
    
    

    查看效果

    image

    FastAPI Demo

    通过 uvicorn 做服务器,轻量级高效的web服务器框架
    fastapi_demo.py

    #!/usr/bin/env python
    import logging
    import os
     
    from fastapi import FastAPI
    from fastapi.responses import FileResponse
    
    # 指定静态页面的地址
    app = FastAPI()
    
    port = int(os.getenv("PORT", 8080))
    
    PATH = os.path.dirname(os.path.abspath(__file__))
    
    
    @app.get("/")
    async def get_index():
        return FileResponse(os.path.join(PATH, "static", "index.html"))
    
    
    @app.get("/hello")
    async def hello():
        return {"message": "Hello, FastAPI!"}
    
    
    if __name__ == "__main__":
        import uvicorn
    
        logging.root.setLevel(logging.INFO)
        logging.info("Starting on port %d ", port)
    
        uvicorn.run(app, port=port)
    
    

    查看效果

    image

  • 相关阅读:
    Sentinel底层原理(下)
    C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
    Java面向对象(进阶)-- this关键字的使用
    6.S081 附加Lab4 从源代码看进程退出——exit,wait,kill
    IT部门不想每天忙“取数”,花了几百万买系统,还是这个办法有效
    Hanoi塔问题
    号称年薪30万占比最多的专业,你知道是啥嘛?
    力扣打卡之两数之和【有序数组和无序数组】
    Nginx超时配置
    《代理选择与反爬虫策略探究:如何优化网络爬虫效率与稳定性》
  • 原文地址:https://www.cnblogs.com/vipsoft/p/17649262.html