DEV Community

Usool
Usool

Posted on

How to Start a Flask Application: A Comprehensive Guide

If you're like me, you’ve probably seen a few different approaches to starting a Flask application and wondered which one is the best. Sometimes, you’ll encounter manage.py, other times, you'll see create_app. This can lead to confusion, especially if you're new to Flask development or transitioning from one project to another.

In this article, I will walk you through the most common methods used to start a Flask application, breaking them down with clear examples so you can decide what works best for your use case.

Method 1: Basic app.py File

The simplest way to start a Flask application is by creating an app.py file. This is great for small applications or when you're just starting with Flask.

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Welcome to my Flask app!"

if __name__ == "__main__":
    app.run(debug=True)
Enter fullscreen mode Exit fullscreen mode

How to Run It:

In your terminal, navigate to the folder containing app.py and run:

python app.py
Enter fullscreen mode Exit fullscreen mode

Flask will start on localhost:5000, and you can visit your app in a browser. This is the quickest method, but it has limitations for scaling.

Method 2: Using create_app Factory Pattern

As your application grows, the factory pattern with create_app() becomes more useful. This method provides a way to configure and initialize your app in a modular way, allowing you to better manage complex setups.

# app.py
from flask import Flask

def create_app():
    app = Flask(__name__)

    @app.route('/')
    def home():
        return "Hello from Factory Pattern!"

    return app
Enter fullscreen mode Exit fullscreen mode

How to Run It:

Since there’s no if __name__ == "__main__" block, you'll run it by setting the FLASK_APP environment variable.

export FLASK_APP=app:create_app
export FLASK_ENV=development
flask run
Enter fullscreen mode Exit fullscreen mode

This method is more scalable because it allows for easier configuration management, making it suitable for larger applications or ones using extensions.

Method 3: Using manage.py with Flask-Script

Although Flask-Script has been deprecated in favor of Flask's built-in command-line interface (CLI), some legacy applications still use the manage.py approach.

# manage.py
from flask_script import Manager
from app import create_app

app = create_app()
manager = Manager(app)

if __name__ == "__main__":
    manager.run()
Enter fullscreen mode Exit fullscreen mode

To run the application:

python manage.py runserver
Enter fullscreen mode Exit fullscreen mode

Since this method is now considered outdated, it is better to rely on Flask's CLI for similar functionalities.

Method 4: Using Gunicorn for Production

When deploying a Flask application to production, you'll want to use a WSGI server like Gunicorn instead of Flask’s built-in development server.

Here’s how you would run your create_app method with Gunicorn:

gunicorn 'app:create_app()'
Enter fullscreen mode Exit fullscreen mode

This will launch your Flask app using Gunicorn. You can specify the number of worker processes, the host, and the port if needed:

gunicorn -w 3 -b 0.0.0.0:8000 'app:create_app()'
Enter fullscreen mode Exit fullscreen mode

Method 5: Using flask run for the Built-in CLI

Flask’s CLI simplifies running the app and performing other commands like migrations. The default CLI uses the FLASK_APP and FLASK_ENV environment variables.

export FLASK_APP=app.py
export FLASK_ENV=development
flask run
Enter fullscreen mode Exit fullscreen mode

This command runs your app in development mode with hot reloading and debug mode enabled. It’s great for development, but you shouldn’t use it in production.

Which One Should You Use?

  • Small Projects or Prototypes: The basic app.py method works perfectly.
  • Large Applications: Go for the create_app factory pattern, as it scales well with extensions and complex configurations.
  • Production: Use Gunicorn or other WSGI servers to handle multiple requests concurrently and offer better performance.

Conclusion

Understanding these different methods gives you flexibility in how you start a Flask application. Whether you're building a small project or deploying a large-scale system, you’ll find the right approach to suit your needs. By grasping the essentials of each method, you'll be able to maintain and scale your application efficiently.

Have you used a different approach that works better for you? Let me know in the comments!

Top comments (0)