【问题标题】:How to run a flask application?如何运行烧瓶应用程序?
【发布时间】:2015-07-05 03:11:22
【问题描述】:

我想知道启动烧瓶应用程序的正确方法。文档显示了两个不同的命令:

$ flask -a sample run

$ python3.4 sample.py 

产生相同的结果并正确运行应用程序。

两者之间有什么区别,应该使用哪个来运行 Flask 应用程序?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    不导出任何内容的非常简单的自动方法是使用python app.py,请参见此处的示例

    from flask import (
        Flask, 
        jsonify
    )
    
    # Function that create the app 
    def create_app(test_config=None ):
        # create and configure the app
        app = Flask(__name__)
    
        # Simple route
        @app.route('/')
        def hello_world(): 
            return jsonify({
               "status": "success",
                "message": "Hello World!"
            }) 
         
        return app # do not forget to return the app
    
    APP = create_app()
    
    if __name__ == '__main__':
        # APP.run(host='0.0.0.0', port=5000, debug=True)
        APP.run(debug=True)
    

    【讨论】:

      【解决方案2】:

      flask 命令是用于与 Flask 应用程序交互的 CLI。 docs 描述了如何使用 CLI 命令和添加自定义命令。 flask run 命令是启动开发服务器的首选方式。

      使用FLASK_APP 环境变量将命令指向您的应用程序。设置FLASK_ENV=development 以使用调试器和重新加载器运行。切勿使用此命令公开部署,使用生产 WSGI 服务器,例如 Gunicorn、uWSGI、Waitress 或 mod_wsgi。

      $ export FLASK_APP=sample
      $ export FLASK_ENV=development
      $ flask run
      

      在 Windows CMD 上,使用 set 而不是 export

      > set FLASK_APP=sample
      

      对于 PowerShell,请使用 $env:

      > $env:FLASK_APP = "sample"
      

      python sample.py 命令运行 Python 文件并设置 __name__ == "__main__"。如果主块调用app.run(),它将运行开发服务器。

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

      这两个命令最终都会启动 Werkzeug development server,顾名思义,它会启动一个仅应在开发期间使用的简单 HTTP 服务器。您应该更喜欢使用flask run 命令而不是app.run() 方法。

      【讨论】:

        【解决方案3】:

        作为 API 服务运行

        from flask import Flask
        class A:
            def one(port):
                app = Flask(__name__)
                app.run(port=port)
                print("something")
        
            one(port=2222)
        

        输出:

        * Running on http://127.0.0.1:2222/ (Press CTRL+C to quit)
        

        【讨论】:

          【解决方案4】:

          你只需要运行这个命令

          python app.py

          (app.py 是你想要的烧瓶文件)

          但请确保您的 .py 文件具有以下烧瓶设置(与端口和主机相关)

          from flask import Flask, request
          from flask_restful import Resource, Api
          import sys
          import os
          
          app = Flask(__name__)
          api = Api(app)
          port = 5100
          
          if sys.argv.__len__() > 1:
              port = sys.argv[1]
          print("Api running on port : {} ".format(port))
          
          class topic_tags(Resource):
              def get(self):
                  return {'hello': 'world world'}
          
          api.add_resource(topic_tags, '/')
          
          
          if __name__ == '__main__':
              app.run(host="0.0.0.0", port=port)
          

          【讨论】:

            【解决方案5】:

            对于 Linux/Unix/MacOS:-

            export FLASK_APP = sample.py
            flask run
            

            对于 Windows:-

            python sample.py
                  OR
            set FLASK_APP = sample.py
            flask run
            

            【讨论】:

              【解决方案6】:

              Latest documentation 具有以下示例,假设您要运行hello.py(使用.py 文件扩展名是可选的):

              Unix、Linux、macOS 等:

              $ export FLASK_APP=hello
              $ flask run
              

              窗户:

              > set FLASK_APP=hello
              > flask run
              

              【讨论】:

                【解决方案7】:

                只有在你输入时它才会在 cmd 中工作

                > pipenv shell 
                

                先在虚拟环境中启动子shell,然后输入

                > set FLASK_APP=hello
                > flask run
                

                【讨论】:

                  猜你喜欢
                  • 2018-12-13
                  • 2019-11-13
                  • 2018-09-27
                  • 2018-10-25
                  • 2021-12-22
                  • 1970-01-01
                  • 2020-05-23
                  • 2016-07-12
                  • 1970-01-01
                  相关资源
                  最近更新 更多