Flask Cheat Sheet – And FREE samples

Hello Coders,

This article is just another Flask Cheat Sheet that might help beginners to speed up their learning curve and the rest of our audience with some nice production-ready samples. For newcomers, Flask is a lightweight web application framework written in Python. Sometimes classified as a microframework, Flask provides a lightweight codebase that can be easily extended to become an API, a simple web app, or a complex eCommerce platform.


Thank you! Content provided by AppSeed – App Generator.



1# – What is Flask

Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to complex applications. Classified as a microframework, Flask aims to keep the core of its framework small but highly extensible.


2# – Install Flask

<span>$ </span>pip <span>install </span>Flask
<span>$ </span>pip <span>install </span>Flask
$ pip install Flask

Enter fullscreen mode Exit fullscreen mode


3# – Creating an isolated environment

<span>$ </span>python <span>-m</span> venv flask_env
<span>$ </span>python <span>-m</span> venv flask_env
$ python -m venv flask_env

Enter fullscreen mode Exit fullscreen mode

Activate virtual environment

<span>$ </span><span>source </span>flask_env/bin/activate
<span>$ </span><span>source </span>flask_env/bin/activate
$ source flask_env/bin/activate

Enter fullscreen mode Exit fullscreen mode

Deactivate virtual environment

<span>$ </span>deactivate
<span>$ </span>deactivate
$ deactivate

Enter fullscreen mode Exit fullscreen mode


4# – A super simple Flask app

<span>from</span> <span>flask</span> <span>import</span> <span>Flask</span>
<span>app</span> <span>=</span> <span>Flask</span><span>(</span><span>__name__</span><span>)</span>
<span>@app.route</span><span>(</span><span>'</span><span>/</span><span>'</span><span>)</span>
<span>def</span> <span>hello</span><span>():</span>
<span>return</span> <span>f</span><span>'</span><span>Hello from Flask!</span><span>'</span>
<span>from</span> <span>flask</span> <span>import</span> <span>Flask</span>

<span>app</span> <span>=</span> <span>Flask</span><span>(</span><span>__name__</span><span>)</span>

<span>@app.route</span><span>(</span><span>'</span><span>/</span><span>'</span><span>)</span>
<span>def</span> <span>hello</span><span>():</span>
    <span>return</span> <span>f</span><span>'</span><span>Hello from Flask!</span><span>'</span>
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return f'Hello from Flask!'

Enter fullscreen mode Exit fullscreen mode


5# – Start the app

<span>$ </span><span>env </span><span>FLASK_APP</span><span>=</span>hello.py flask run
<span>*</span> Serving Flask app <span>"hello"</span>
<span>*</span> Running on http://127.0.0.1:5000/
<span>$ </span><span>env </span><span>FLASK_APP</span><span>=</span>hello.py flask run
 <span>*</span> Serving Flask app <span>"hello"</span>
 <span>*</span> Running on http://127.0.0.1:5000/
$ env FLASK_APP=hello.py flask run * Serving Flask app "hello" * Running on http://127.0.0.1:5000/

Enter fullscreen mode Exit fullscreen mode


6# – Object-Based Configuration

Create a new config file in the project root:

PROJECT_ROOT/app/config.py

Add content using OOP and class inheritance

<span>class</span> <span>BaseCfg</span><span>(</span><span>object</span><span>):</span>
<span>SECRET_KEY</span> <span>=</span> <span>'</span><span>SuperS3cretKEY_1222</span><span>'</span>
<span>DEBUG</span> <span>=</span> <span>False</span>
<span>TESTING</span> <span>=</span> <span>False</span>
<span>class</span> <span>DevelopmentCfg</span><span>(</span><span>BaseCfg</span><span>):</span>
<span>DEBUG</span> <span>=</span> <span>True</span>
<span>TESTING</span> <span>=</span> <span>True</span>
<span>class</span> <span>TestingCfg</span><span>(</span><span>BaseCfg</span><span>):</span>
<span>DEBUG</span> <span>=</span> <span>False</span>
<span>TESTING</span> <span>=</span> <span>True</span>
<span>class</span> <span>ProductionCfg</span><span>(</span><span>BaseCfg</span><span>):</span>
<span>SECRET_KEY</span> <span>=</span> <span>'</span><span>HvFDDcfsnd__9nbCdgsada</span><span>'</span>
<span>DEBUG</span> <span>=</span> <span>False</span>
<span>TESTING</span> <span>=</span> <span>False</span>
<span>class</span> <span>BaseCfg</span><span>(</span><span>object</span><span>):</span>
    <span>SECRET_KEY</span> <span>=</span> <span>'</span><span>SuperS3cretKEY_1222</span><span>'</span>
    <span>DEBUG</span> <span>=</span> <span>False</span>
    <span>TESTING</span> <span>=</span> <span>False</span>

<span>class</span> <span>DevelopmentCfg</span><span>(</span><span>BaseCfg</span><span>):</span>
    <span>DEBUG</span> <span>=</span> <span>True</span>
    <span>TESTING</span> <span>=</span> <span>True</span>

<span>class</span> <span>TestingCfg</span><span>(</span><span>BaseCfg</span><span>):</span>
    <span>DEBUG</span> <span>=</span> <span>False</span>
    <span>TESTING</span> <span>=</span> <span>True</span>

<span>class</span> <span>ProductionCfg</span><span>(</span><span>BaseCfg</span><span>):</span>
    <span>SECRET_KEY</span> <span>=</span> <span>'</span><span>HvFDDcfsnd__9nbCdgsada</span><span>'</span> 
    <span>DEBUG</span> <span>=</span> <span>False</span>
    <span>TESTING</span> <span>=</span> <span>False</span>
class BaseCfg(object): SECRET_KEY = 'SuperS3cretKEY_1222' DEBUG = False TESTING = False class DevelopmentCfg(BaseCfg): DEBUG = True TESTING = True class TestingCfg(BaseCfg): DEBUG = False TESTING = True class ProductionCfg(BaseCfg): SECRET_KEY = 'HvFDDcfsnd__9nbCdgsada' DEBUG = False TESTING = False

Enter fullscreen mode Exit fullscreen mode

Let’s use the configuration:

Update PROJECT_ROOT/app/__init__.py to use it:

<span>from</span> <span>flask</span> <span>import</span> <span>Flask</span>
<span>from</span> <span>app</span> <span>import</span> <span>config</span>
<span>app</span> <span>=</span> <span>Flask</span><span>(</span><span>__name__</span><span>)</span>
<span>app</span><span>.</span><span>config</span><span>.</span><span>from_object</span><span>(</span><span>config</span><span>.</span><span>DevelopmentCfg</span><span>)</span> <span># <--- Magic line </span>
<span>from</span> <span>flask</span> <span>import</span> <span>Flask</span>
<span>from</span> <span>app</span> <span>import</span> <span>config</span>

<span>app</span> <span>=</span> <span>Flask</span><span>(</span><span>__name__</span><span>)</span>
<span>app</span><span>.</span><span>config</span><span>.</span><span>from_object</span><span>(</span><span>config</span><span>.</span><span>DevelopmentCfg</span><span>)</span> <span># <--- Magic line </span>
from flask import Flask from app import config app = Flask(__name__) app.config.from_object(config.DevelopmentCfg) # <--- Magic line

Enter fullscreen mode Exit fullscreen mode


7# – Render page using Jinja

The Flask controller

<span>from</span> <span>flask</span> <span>import</span> <span>Flask</span><span>,</span> <span>render_template</span>
<span>app</span> <span>=</span> <span>Flask</span><span>(</span><span>__name__</span><span>)</span>
<span>@app.route</span><span>(</span><span>"</span><span>/test</span><span>"</span><span>)</span>
<span>def</span> <span>template_test</span><span>():</span>
<span>return</span> <span>render_template</span><span>(</span><span>'</span><span>template.html</span><span>'</span><span>,</span> <span>my_string</span><span>=</span><span>"</span><span>Jinja Works!!</span><span>"</span><span>)</span>
<span>if</span> <span>__name__</span> <span>==</span> <span>'</span><span>__main__</span><span>'</span><span>:</span>
<span>app</span><span>.</span><span>run</span><span>(</span><span>debug</span><span>=</span><span>True</span><span>)</span>
<span>from</span> <span>flask</span> <span>import</span> <span>Flask</span><span>,</span> <span>render_template</span>
<span>app</span> <span>=</span> <span>Flask</span><span>(</span><span>__name__</span><span>)</span>

<span>@app.route</span><span>(</span><span>"</span><span>/test</span><span>"</span><span>)</span>
<span>def</span> <span>template_test</span><span>():</span>
    <span>return</span> <span>render_template</span><span>(</span><span>'</span><span>template.html</span><span>'</span><span>,</span> <span>my_string</span><span>=</span><span>"</span><span>Jinja Works!!</span><span>"</span><span>)</span>

<span>if</span> <span>__name__</span> <span>==</span> <span>'</span><span>__main__</span><span>'</span><span>:</span>
    <span>app</span><span>.</span><span>run</span><span>(</span><span>debug</span><span>=</span><span>True</span><span>)</span>
from flask import Flask, render_template app = Flask(__name__) @app.route("/test") def template_test(): return render_template('template.html', my_string="Jinja Works!!") if __name__ == '__main__': app.run(debug=True)

Enter fullscreen mode Exit fullscreen mode

The HTML template

<span><html></span>
<span><head></span>
<span><title></span>Flask Template Example<span></title></span>
<span></head></span>
<span><body></span>
<span><div</span> <span>class=</span><span>"container"</span><span>></span>
<span><p></span>Result: {{my_string}}<span></p></span>
<span></div></span>
<span></body></span>
<span></html></span>
<span><html></span>
  <span><head></span>
    <span><title></span>Flask Template Example<span></title></span>
  <span></head></span>
  <span><body></span>
    <span><div</span> <span>class=</span><span>"container"</span><span>></span>
      <span><p></span>Result: {{my_string}}<span></p></span>
    <span></div></span>
  <span></body></span>
<span></html></span>
<html> <head> <title>Flask Template Example</title> </head> <body> <div class="container"> <p>Result: {{my_string}}</p> </div> </body> </html>

Enter fullscreen mode Exit fullscreen mode


By accessing http://localhost:5000/test in the browser, we should see:

Status: Jinja Works


8# – Using Flask shell

<span>$ </span>flask shell
<span>$ </span>flask shell
$ flask shell

Enter fullscreen mode Exit fullscreen mode


9# – Define a model with SQLAlchemy using SQLite

Create PROJECT_ROOT/app/models.py with the following content:

<span>from</span> <span>flask_sqlalchemy</span> <span>import</span> <span>SQLAlchemy</span>
<span>db</span> <span>=</span> <span>SQLAlchemy</span><span>()</span>
<span>class</span> <span>User</span><span>(</span><span>db</span><span>.</span><span>Model</span><span>):</span>
<span>id</span> <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>Integer</span><span>,</span> <span>primary_key</span><span>=</span><span>True</span><span>)</span>
<span>user</span> <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>String</span><span>(</span><span>64</span><span>),</span> <span>unique</span> <span>=</span> <span>True</span><span>)</span>
<span>email</span> <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>String</span><span>(</span><span>120</span><span>),</span> <span>unique</span> <span>=</span> <span>True</span><span>)</span>
<span>password</span> <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>String</span><span>(</span><span>500</span><span>))</span>
<span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>user</span><span>,</span> <span>email</span><span>,</span> <span>password</span><span>):</span>
<span>self</span><span>.</span><span>user</span> <span>=</span> <span>user</span>
<span>self</span><span>.</span><span>password</span> <span>=</span> <span>password</span>
<span>self</span><span>.</span><span>email</span> <span>=</span> <span>email</span>
<span>from</span> <span>flask_sqlalchemy</span> <span>import</span> <span>SQLAlchemy</span>

<span>db</span> <span>=</span> <span>SQLAlchemy</span><span>()</span>

<span>class</span> <span>User</span><span>(</span><span>db</span><span>.</span><span>Model</span><span>):</span>

    <span>id</span>       <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>Integer</span><span>,</span>     <span>primary_key</span><span>=</span><span>True</span><span>)</span>
    <span>user</span>     <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>String</span><span>(</span><span>64</span><span>),</span>  <span>unique</span> <span>=</span> <span>True</span><span>)</span>
    <span>email</span>    <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>String</span><span>(</span><span>120</span><span>),</span> <span>unique</span> <span>=</span> <span>True</span><span>)</span>
    <span>password</span> <span>=</span> <span>db</span><span>.</span><span>Column</span><span>(</span><span>db</span><span>.</span><span>String</span><span>(</span><span>500</span><span>))</span>

    <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>user</span><span>,</span> <span>email</span><span>,</span> <span>password</span><span>):</span>
        <span>self</span><span>.</span><span>user</span>       <span>=</span> <span>user</span>
        <span>self</span><span>.</span><span>password</span>   <span>=</span> <span>password</span>
        <span>self</span><span>.</span><span>email</span>      <span>=</span> <span>email</span>
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class User(db.Model): id = db.Column(db.Integer, primary_key=True) user = db.Column(db.String(64), unique = True) email = db.Column(db.String(120), unique = True) password = db.Column(db.String(500)) def __init__(self, user, email, password): self.user = user self.password = password self.email = email

Enter fullscreen mode Exit fullscreen mode

Update PROJECT_ROOT/app/config.py with the Database connection string:

<span>class</span> <span>BaseCfg</span><span>(</span><span>object</span><span>):</span>
<span>SECRET_KEY</span> <span>=</span> <span>'</span><span>SuperS3cretKEY_1222</span><span>'</span>
<span>DEBUG</span> <span>=</span> <span>False</span>
<span>TESTING</span> <span>=</span> <span>False</span>
<span># This will create a file in <app> FOLDER </span> <span>SQLALCHEMY_DATABASE_URI</span> <span>=</span> <span>'</span><span>sqlite:///</span><span>'</span> <span>+</span> <span>os</span><span>.</span><span>path</span><span>.</span><span>join</span><span>(</span><span>basedir</span><span>,</span> <span>'</span><span>db.sqlite3</span><span>'</span><span>)</span>
<span>SQLALCHEMY_TRACK_MODIFICATIONS</span> <span>=</span> <span>False</span>
<span>class</span> <span>BaseCfg</span><span>(</span><span>object</span><span>):</span>
    <span>SECRET_KEY</span> <span>=</span> <span>'</span><span>SuperS3cretKEY_1222</span><span>'</span>
    <span>DEBUG</span> <span>=</span> <span>False</span>
    <span>TESTING</span> <span>=</span> <span>False</span>

    <span># This will create a file in <app> FOLDER </span>    <span>SQLALCHEMY_DATABASE_URI</span> <span>=</span> <span>'</span><span>sqlite:///</span><span>'</span> <span>+</span> <span>os</span><span>.</span><span>path</span><span>.</span><span>join</span><span>(</span><span>basedir</span><span>,</span> <span>'</span><span>db.sqlite3</span><span>'</span><span>)</span>
    <span>SQLALCHEMY_TRACK_MODIFICATIONS</span> <span>=</span> <span>False</span>
class BaseCfg(object): SECRET_KEY = 'SuperS3cretKEY_1222' DEBUG = False TESTING = False # This will create a file in <app> FOLDER SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'db.sqlite3') SQLALCHEMY_TRACK_MODIFICATIONS = False

Enter fullscreen mode Exit fullscreen mode

Update PROJECT_ROOT/app/__init__.py to use the model:

<span>from</span> <span>flask_sqlalchemy</span> <span>import</span> <span>SQLAlchemy</span>
<span>...</span>
<span>db</span> <span>=</span> <span>SQLAlchemy </span><span>(</span><span>app</span><span>)</span> <span># flask-sqlalchemy </span>
<span>from</span> <span>flask_sqlalchemy</span> <span>import</span> <span>SQLAlchemy</span>
<span>...</span>

<span>db</span> <span>=</span> <span>SQLAlchemy </span><span>(</span><span>app</span><span>)</span> <span># flask-sqlalchemy </span>
from flask_sqlalchemy import SQLAlchemy ... db = SQLAlchemy (app) # flask-sqlalchemy

Enter fullscreen mode Exit fullscreen mode

The User tables can be created using flask shell:

<span>$ </span>flask shell
<span>>>></span> from app import db
<span>>>></span> db.create_all<span>()</span>
<span>$ </span>flask shell
<span>>>></span> from app import db
<span>>>></span> db.create_all<span>()</span>
$ flask shell >>> from app import db >>> db.create_all()

Enter fullscreen mode Exit fullscreen mode

The second method is to create the tables automatically at the first request using a hook provided by Flask.

Update PROJECT_ROOT/app/__init__.py as below:

<span># Setup database </span><span>@app.before_first_request</span>
<span>def</span> <span>initialize_database</span><span>():</span>
<span>db</span><span>.</span><span>create_all</span><span>()</span>
<span># Setup database </span><span>@app.before_first_request</span>
<span>def</span> <span>initialize_database</span><span>():</span>
    <span>db</span><span>.</span><span>create_all</span><span>()</span>
# Setup database @app.before_first_request def initialize_database(): db.create_all()

Enter fullscreen mode Exit fullscreen mode


10# – List users via Flask shell

<span>$ </span>flask shell
<span>>>></span> from app.models import User
<span>>>></span> User.query.all<span>()</span>
<span># HERE we should see all users </span>
<span>$ </span>flask shell
<span>>>></span> from app.models import User
<span>>>></span> User.query.all<span>()</span>
<span># HERE we should see all users </span>
$ flask shell >>> from app.models import User >>> User.query.all() # HERE we should see all users

Enter fullscreen mode Exit fullscreen mode


Let’s see this theory applied to these open-source Flask samples:


Flask Pixel UI Kit

Open-Source Web App coded in Flask Framework – features:

  • UI Kit: Pixel UI kit by Themesberg
  • UI-Ready, Jinja2 templating
  • SQLite database, Flask-SQLAlchemy ORM
  • Session-Based auth flow (login, register)



Flask Datta Able

Flask Dashboard generated by the AppSeed platform on top of Datta Able (free version), a modern Bootstrap 4 dashboard template. The Flask codebase is provided with authentication, database, ORM, and deployment scripts.



Flask Volt Free

Open-Source Flask Dashboard coded with basic modules, database, ORM and deployment scripts on top of Volt Dashboard (free version), a modern Bootstrap dashboard design.

Volt is a free and open source Bootstrap 5 Admin Dashboard featuring over 100 components, 11 example pages and 3 customized plugins. Volt does not require jQuery as a dependency meaning that every library and script’s are jQuery free.



Flask Dashboard Argon

Argon Dashboard is built with over 100 individual components, giving you the freedom of choosing and combining. All components can take variations in color, that you can easily modify using SASS files.

You will save a lot of time going from prototyping to full-functional code, because all elements are implemented. This Dashboard is coming with pre-built examples, so the development process is seamless, switching from our pages to the real website is very easy to be done.



Thanks for reading! For more resources please access:


Thank you! Btw, my (nick) name is Sm0ke and I’m pretty active also on Twitter.

原文链接:Flask Cheat Sheet – And FREE samples

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
Turn your face to the sun and the shadows fall behind you.
永远面向阳光,这样你就看不见阴影了
评论 抢沙发

请登录后发表评论

    暂无评论内容