2. Code xử lý
2.1.6. Khai báo các định tuyến được định nghĩa bên trong Blueprint
Sau khi lập trình xử lý và định tuyến các class trong chức năng quản lý thông tin khách hàng, để chức năng hoạt động được, cần phải khai báo các định tuyến được định nghĩa bên trong blueprint client của hệ thống.
Đề tài đồ án tốt nghiệp 2018 – 2021 Trường Đại học Bà Rịa – Vũng Tàu
SINH VIÊN THỰC HIỆN: BÙI VĂN HUÂN 71
2.1.6.1. Main/__init__.py
from flask import Flask
class App(Flask):
def __init__(self, instance_path: str): super(App, self).__init__(
import_name=__name__,
instance_path=instance_path,
instance_relative_config=True
)
# assigning the base templates & static folder
self.template_folder = './base/templates'
self.static_folder = './base/static' # loading environment variables
self.load_environment_variables()
# registering essential partials for the app
self.register_blueprints()
self.register_login_manager()
def register_blueprints(self): """
Registering the app's blueprints. """
from src.main.modules.client import client_module
self.register_blueprint(client_module, url_prefix="/client")
def register_login_manager(self): # adding login manager
from flask_login import LoginManager
login_manager = LoginManager()
login_manager.login_view = "auth.login" login_manager.init_app(self)
@login_manager.user_loader
def load_user(email):
# registering user_loader
from src.main.modules.user import User
return User.query.get(email)
def load_environment_variables(self): """
Loading the configured environment variables. """
# Load the default configuration (../config/default.py)
self.config.from_object('config.default')
# Load the file specified by the APP_CONFIG_FILE environment variable # Variables defined here will override those in the default
configuration
Đề tài đồ án tốt nghiệp 2018 – 2021 Trường Đại học Bà Rịa – Vũng Tàu
SINH VIÊN THỰC HIỆN: BÙI VĂN HUÂN 72
2.1.6.2. Src/__init__.py
import sys
import os
from pathlib import Path
def add_sys_paths():
print('\n[ADDING PATHS TO THE PYTHON ENVIRONMENT...]')
# getting the current file's absolute path
CURRENT_FILE_ABSOLUTE_PATH = Path(__file__).absolute()
# WORKING_DIR: src
WORKING_DIR = os.path.abspath(os.path.join(CURRENT_FILE_ABSOLUTE_PATH, '../'))
# ROOT_DIR (includes the: src ; scripts ; venv ; ..
ROOT_DIR = os.path.abspath(os.path.join(CURRENT_FILE_ABSOLUTE_PATH, '../../'))
# appending the WORKING_DIR, ROOT_DIR to the python environment
sys.path.append(WORKING_DIR) sys.path.append(ROOT_DIR)
print('\n[PATHS IN THE PYTHON ENVIRONMENT...]:') print('\n'.join(sys.path), '\n')
return WORKING_DIR, ROOT_DIR
def create_app():
# initializing the app
print("\n[INITIALIZING THE APP...]")
from src.main import App
app = App(instance_path=add_sys_paths()[0]) print("\n[INITIALIZING THE DATABASE...]") db.init_app(app=app)
# migrating Models to DB
from flask_migrate import Migrate
print("\n\n[MIGRATING THE DATABASE...]") migrate = Migrate()
with app.app_context():
# allow dropping column for sqlite
if db.engine.url.drivername == 'sqlite':
migrate.init_app(app, db, render_as_batch=True) else:
migrate.init_app(app, db)
# importing models
import src.main.modules.user.user_model
# place your new model (want to be created in the app.sqlite) here
import src.main.modules.client.client_model
print('\n\n[NEW APP RETURNED...]')
return app
Đề tài đồ án tốt nghiệp 2018 – 2021 Trường Đại học Bà Rịa – Vũng Tàu
SINH VIÊN THỰC HIỆN: BÙI VĂN HUÂN 73
print("\n[DEFINING THE DATABASE INSTANCE...]")
from flask_sqlalchemy import SQLAlchemy