shutdown flask server with request

from flask import Flask, request

app = Flask(__name__)

@app.route('/shutdown', methods=['POST'])
def shutdown():
    shutdown_func = request.environ.get('werkzeug.server.shutdown')
    if shutdown_func is None:
        raise RuntimeError('Not running with the Werkzeug Server')
    shutdown_func()
    return 'Server shutting down...'

if __name__ == '__main__':
    app.run()

Explanation:

  1. Import Flask and Request: The code imports necessary modules from Flask, which is a web development framework for Python. The Flask module is for creating the web application, and request is for handling incoming requests.

  2. Create an instance of Flask: app = Flask(__name__) creates an instance of the Flask class, representing the web application.

  3. Define a route for shutdown: @app.route('/shutdown', methods=['POST']) decorator is used to create a route /shutdown that accepts only POST requests.

  4. Shutdown Function: The shutdown() function is defined to handle the POST request to the /shutdown endpoint.

  5. Retrieve Shutdown Function: shutdown_func = request.environ.get('werkzeug.server.shutdown') tries to retrieve the shutdown function from the request's environment.

  6. Check Shutdown Function Existence: The code checks if the shutdown function is available. If it doesn't exist, it raises a RuntimeError.

  7. Execute Shutdown Function: shutdown_func() is called to shut down the Flask server.

  8. Return Response: After shutting down the server, the function returns a message indicating the server is shutting down.

  9. Run the Flask App: app.run() starts the Flask development server if the script is executed directly, allowing the application to handle incoming requests.