Tôi sẽ nói nếu bạn chia nhỏ ứng dụng, hãy sử dụng bộ phận thay vì cấu trúc chức năng. Tôi ủng hộ điều này bởi vì bạn có nhiều khả năng làm việc trên 1 trong những thành phần bộ phận này bất cứ lúc nào
Loại cấu trúc này phù hợp với thị trường hoặc ứng dụng SaaS nơi các nhóm người dùng khác nhau sử dụng một loại chế độ xem khác nhau. API chỉ ứng dụng bình tôi có thể sử dụng phân tách chức năng
Dưới đây là các ví dụ từ Flask Blueprints. Bản thiết kế về cơ bản là tài liệu hướng dẫn cách chia nhỏ ứng dụng Flask để có nhiều phần dễ quản lý hơn. Thêm về điều này tại. http. // khám phá bình. com/vi/mới nhất/bản thiết kế. html
Flask là một microframework và nó không hạn chế chúng ta với một mẫu cấu trúc thư mục duy nhất. Thay vào đó, nó cho chúng ta tự do thực hiện lựa chọn giải pháp của riêng mình. Giống như mọi thứ đều có 2 mặt tốt và xấu, khái niệm tương tự cũng được áp dụng ở đây. Có, chúng tôi có thể xây dựng cấu trúc dự án bình của riêng mình nhưng bạn sẽ tìm thấy nhiều cách triển khai khác nhau trên internet. Vì vậy, sau một số nghiên cứu và triển khai, tôi đã đưa ra cấu trúc dự án cấp đầu vào cho ứng dụng bình
Cấu trúc dự án Flask
Lý do tôi gọi nó là cấp nhập cảnh là vì tôi sẽ không thêm các lệnh tùy chỉnh hoặc thứ gì đó tương tự để làm phức tạp mục tiêu chính
Mục tiêu chính của chúng tôi là xác định cấu trúc dự án bình có khả năng mở rộng cao
Bản thân tôi đã từng làm việc trên nhiều framework back-end khác nhau bao gồm Laravel, Django, CodeIgniter, v.v.
Tất cả các khung này có một kiến trúc khác nhau mà chúng tuân theo. Bây giờ, trước tiên hãy hiểu tại sao mọi người nghĩ về khả năng mở rộng của ứng dụng web
Vì đây là một bài viết dựa trên Flask nên hãy thảo luận về nó theo cách của Flask. Bạn bắt đầu xây dựng một ứng dụng web với một ý tưởng rất cơ bản và theo thời gian, nó không ngừng phát triển
Bạn đang thêm nhiều mã hơn vào cùng một tệp python và đột nhiên bạn thấy nó được tăng tốc và bạn đang gặp sự cố nghiêm trọng khi gỡ lỗi
Bạn có thể tưởng tượng hàng trăm phương thức trong một tệp python. Vì vậy, để thoát khỏi vấn đề này Blueprint đã được giới thiệu
Bản thiết kế bình
Blueprint cung cấp một cách rất rõ ràng để xây dựng cấu trúc dự án bình định hướng theo miền mô-đun. Nếu bạn đã sử dụng Django thì bạn sẽ thấy nó rất giống
Lý do sử dụng bản thiết kế
Có nhiều lý do để sử dụng bản thiết kế trong Flask
- Bản thiết kế có thể giúp chia toàn bộ cơ sở mã thành các khối nhỏ hơn
- Nó có thể giúp chúng tôi thiết kế cấu trúc dự án bình hướng miền
- Tăng khả năng sử dụng lại mã
- Bản thiết kế cũng có thể có tập hợp các tệp tĩnh, mẫu và trang lỗi tùy chỉnh của riêng chúng
Vì vậy, hãy nhanh chóng thiết lập một dự án bình với bản thiết kế
Chúng tôi sẽ sử dụng cấu trúc trên cho ứng dụng của chúng tôi. Hãy bắt đầu từ đầu và hiểu tiện ích của từng tệp
Khái niệm cơ bản ở đây là một trang web bình có thể có nhiều ứng dụng và mỗi ứng dụng sẽ có bộ mô hình, chế độ xem và mẫu riêng
Ở đây các ứng dụng là bản thiết kế bình nên bạn đặt tên cho thư mục là ứng dụng hoặc bản thiết kế
ứng dụng. py
from flask import Flask
from database import database
# blueprint import
from apps.app1.views import app1
from apps.app2.views import app2
def create_app[]:
app = Flask[__name__]
# setup with the configuration provided
app.config.from_object['config.DevelopmentConfig']
# setup all our dependencies
database.init_app[app]
# register blueprint
app.register_blueprint[app1]
app.register_blueprint[app2, url_prefix="/app2"]
return app
if __name__ == "__main__":
create_app[].run[]
Ở đây bên trong ứng dụng. py, chúng tôi đã nhập bản thiết kế từ thư mục của ứng dụng. Chúng tôi có một phương pháp duy nhất để thiết lập ứng dụng bình của chúng tôi với dữ liệu cấu hình từ cấu hình. tập tin py
Ngoài ra, nó gọi phương thức init_app của SQLAlchemy để thiết lập nó với ứng dụng bình của chúng tôi và tạo tất cả các cơ sở dữ liệu
Tiếp theo, chúng tôi đăng ký các bản thiết kế với phương thức register_blueprint. Nơi chúng tôi cũng có thể chuyển thêm url_prefix
Cuối cùng, trong khối if, chúng ta sẽ gọi phương thức chạy trên ứng dụng của mình
cấu hình. py
import os
class Config[object]:
DEBUG = False
TESTING = False
CSRF_ENABLED = True
SECRET_KEY = '57e19ea558d4967a552d03deece34a70'
SQLALCHEMY_TRACK_MODIFICATIONS = False
class ProductionConfig[Config]:
DEBUG = False
SQLALCHEMY_DATABASE_URI = os.environ.get['DATABASE_URL']
class DevelopmentConfig[Config]:
ENV="development"
DEVELOPMENT=True
DEBUG=True
SQLALCHEMY_DATABASE_URI="sqlite:///development_database.db"
cấu hình. py có một lớp tên là config và sau đó chúng ta có 2 lớp kế thừa. Lớp ProductionConfig chứa các giá trị cấu hình cho sản xuất
Lớp DevelopmentConfig chứa cấu hình để phát triển
cơ sở dữ liệu. py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy[]
def init_app[app]:
db.init_app[app]
db.create_all[app=app]
Tệp này sẽ chỉ tạo một đối tượng SQLAlchemy và khởi tạo nó cũng như tạo tất cả các bảng cơ sở dữ liệu từ tất cả các mô hình. py bên trong bản thiết kế hoặc ứng dụng
thư mục tĩnh
Thư mục tĩnh ở cấp gốc sẽ chứa tất cả các tệp tĩnh được yêu cầu trong toàn bộ dự án. Chúng tôi cũng có thể có các thư mục tĩnh riêng lẻ cho từng bản thiết kế
Tuy nhiên, trong trường hợp đó, việc sử dụng url_prefix là bắt buộc. Vì vậy, tốt hơn là đặt một thư mục tĩnh duy nhất ở thư mục gốc
thư mục mẫu
Thư mục mẫu ở thư mục gốc sẽ chứa tất cả các tệp bố cục mà tất cả các bản thiết kế đều có thể truy cập được
Vì các tệp bố cục cũng sẽ truy cập từ các bản thiết kế nên tốt hơn là đặt chúng ở cấp cơ sở
thư mục ứng dụng
Thư mục ứng dụng của cấu trúc dự án bình chứa tất cả các bản thiết kế và chúng ta có thể có bao nhiêu bản thiết kế bên trong nó như auth, blog, store, v.v.
thư mục bản thiết kế [app1, app2]
Phần quan trọng nhất trong cấu trúc dự án bình của chúng tôi
Mỗi bản thiết kế sẽ có một khung nhìn. py, người mẫu. tệp py và thư mục mẫu. Bên trong các mẫu, thư mục đảm bảo tạo một thư mục khác có tên là thư mục bản thiết kế
Bạn có thể có 2 mẫu có cùng tên tệp bên trong 2 bản thiết kế khác nhau. Trong trường hợp đó, bình sẽ sử dụng bình đầu tiên được tìm thấy
Để thoát khỏi tình huống mơ hồ này, cần tạo một thư mục có tên bản thiết kế bên trong các mẫu
ứng dụng/app1/lượt xem. py
from flask import Blueprint, request, url_for, redirect, render_template, flash
app1 = Blueprint['app1', __name__, template_folder="templates/app1"]
@app1.route["/"]
def home[]:
return render_template['index.html']
@app1.app_errorhandler[404]
def page_not_found[e]:
return render_template['404.html'], 404
Chỉ cần nhập Bản thiết kế từ bình và thêm một dòng để chuyển đổi tệp dạng xem thành bản thiết kế
Bên trong hàm tạo bản thiết kế, chúng tôi đã chuyển tên và đường dẫn thư mục mẫu. Ngoài ra, đường dẫn tệp tĩnh cũng có thể được chuyển
Mỗi bản thiết kế cũng có thể có trình xử lý lỗi riêng. Mà chúng ta có thể tạo bằng cách sử dụng app_errorhandler
ứng dụng/app1/mô hình. py
from database.database import db
from flask_login import UserMixin
class User[db.Model, UserMixin]:
id = db.Column[db.Integer, primary_key=True]
name = db.Column[db.String[150]]
email = db.Column[db.String[150], unique=True]
password = db.Column[db.String[150]]
def __init__[self, name, email]:
self.name = name
self.email = email
Trong tệp mô hình của bản thiết kế, chúng ta chỉ cần nhập db và tạo mô hình bằng SQLAlchemy
ứng dụng/app1/mẫu/app1/chỉ mục. html
{% extends "layouts/app.html" %}
{% block content %}
Build an amazing Flask App
{% endblock %}
Các mẫu bên trong bản thiết kế có thể dễ dàng mở rộng bố cục. Đây là bố cục/ứng dụng. html sẽ lấy nội dung tệp từ thư mục gốc
Vì vậy, đây là cách sử dụng bản thiết kế với bình để tạo cấu trúc dự án bình giúp mở rộng quy mô
Bạn cũng có thể có một thư mục có tên là tiện ích mở rộng ở cấp cơ sở để xử lý việc khởi tạo và thiết lập các tiện ích mở rộng bình khác nhau
Tôi hy vọng bài viết này đã giúp bạn thiết lập cấu trúc dự án bình. Nó phù hợp để sử dụng khi bạn đang làm việc trên một ứng dụng quy mô lớn hoặc trung bình