Understand the Flask project structure

Guanhui
Release: 2020-06-13 10:02:20
forward
2577 people have browsed it

Understand the Flask project structure

Preface

First, we isolate my project using virtualenv. For example, we want to develop a polling application (a poll app).

mkdir poll_app cd poll_app virtualenv . source bin/activate
Copy after login

Commonly used Python libraries

I am developing an application that requires a database. Therefore, I always use flask_script and flask_migrate libraries. I don't like Flask's CLI tooling.

Flask-Script:https://flask-script.readthedocs.io/en/latest/

Flask-Migrate:https://flask-migrate.readthedocs.io/en/latest/

Similarly to Django, I created a file called manage. py Python file, for example:

from MYAPP.data.models import db from MYAPP import app from flask_script import Manager from flask_migrate import Migrate, MigrateCommand db.init_app(app) migrate = Migrate(app, db) manager = Manager(app) manager.add_command('db', MigrateCommand) if __name__ == "__main__": manager.run()
Copy after login

Then, we can perform the following operations on the data:

python manage.py db init # --> init migrations python manage.py db migrate # --> migrate models python manage.py db upgrade # --> apply changes python manage.py db --help # --> :)
Copy after login

Main application file

Create a new project , I create a file app.py in the root folder and then it changes like this.

from MYAPP import app # To do: This place will change later config = { "development": "config.Development" } if __name__ == "__main__": app.config.from_object(config["development"]) app.run()
Copy after login

Configuration File

I also created a configuration file called config.py in the root folder.

class BaseConfig(object): """ Base config class. This fields will use by production and development server """ ORIGINS = ["*"] # for api calls SECRET_KEY = 'YOUR SECRET KEY' class Development(BaseConfig): """ Development config. We use Debug mode """ PORT = 5000 DEBUG = True TESTING = False ENV = 'dev' # Currently we only have development config. # If you have production, you will need to pass it to here. config = { 'development': 'config.Development' } def configure_app(app): """ App configuration will be here. Parameters ---------- app : Flask app instance """ app.config.from_object(config['development'])
Copy after login

Folder structure

I create a folder in the root directory and name it om_core, and then create two new folders in Qi api and data..

api files store application logic and routing. For example, I created a folder called user in the api.

Generate two files named init.py and controllers.py in the user folder, as will our other API layers. controllers.py (controller file) should look like this:

from flask import Blueprint, jsonify, request from MYAPP.data.models import db, User user = Blueprint('user', __name__) @user.route('/', methods=['GET']) def get_users(): return jsonify({ "message": "Hi user :)"}) @user.route('/', methods=['GET']) def users(id): return jsonify({ "id": id })
Copy after login

I always use blueprints.

The data folder stores some models. For example, I created a file called models.py:

from flask_sqlalchemy import SQLAlchemy from MYAPP import app # We didn't pass app instance here. db = SQLAlchemy() class User(db.Model): """ Model for user management """ id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(100), unique=True) password = db.Column(db.String(100)) name = db.Column(db.String(100)) surname = db.Column(db.String(100)) active = db.Column(db.Boolean(), default=True) created_at = db.Column(db.DateTime, default=db.func.now()) updated_at = db.Column(db.DateTime, default=db.func.now()) def __init__(self, email, password, name, surname, active, created_at, updated_at): self.email = email self.password = password self.name = name self.surname = surname self.active = active self.created_at = created_at self.updated_at = updated_at
Copy after login

Let’s go back to the om_core folder. I created a file called init .py to use the Api layer as an endpoint.

from flask import Flask from flask_cors import CORS from config import BaseConfig from config import configure_app app = Flask(__name__) from MYAPP.api.user.controllers import user """ Corst settings will be here. We maybe use this endpoint later. """ cors = CORS(app, resources={ r'/api/*': { 'origins': BaseConfig.ORIGINS } }) configure_app(app) app.url_map.strict_slashes = False app.register_blueprint(user, url_prefix='/api/users')
Copy after login

In the above code, I have used Flask-CORS to allow requests from different origins. This is not required if you do not want to allow requests from different origins.

Screenshots of the overall project structure

The screenshots are as follows:

Understand the Flask project structure

Recommended tutorial: "Python Tutorial"

The above is the detailed content of Understand the Flask project structure. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!