init
This commit is contained in:
71
web/core/factory.py
Normal file
71
web/core/factory.py
Normal file
@@ -0,0 +1,71 @@
|
||||
from datetime import datetime, date
|
||||
from json import JSONEncoder
|
||||
|
||||
from flask import Flask
|
||||
|
||||
""" 程序入口"""
|
||||
|
||||
|
||||
class Singleton(type):
|
||||
_instances = {}
|
||||
|
||||
def __call__(cls, *args, **kwargs):
|
||||
if cls not in cls._instances:
|
||||
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
|
||||
return cls._instances[cls]
|
||||
|
||||
|
||||
class App(Flask):
|
||||
__metaclass__ = Singleton
|
||||
|
||||
def __init__(self, import_name=__name__, **kwargs):
|
||||
super().__init__(import_name, **kwargs)
|
||||
self.bootstrap()
|
||||
|
||||
def bootstrap(self):
|
||||
pass
|
||||
|
||||
|
||||
class CustomJSONEncoder(JSONEncoder):
|
||||
def default(self, obj):
|
||||
if isinstance(obj, datetime):
|
||||
return obj.strftime('%Y-%m-%d %H:%M:%S')
|
||||
elif isinstance(obj, date):
|
||||
return obj.strftime('%Y-%m-%d')
|
||||
else:
|
||||
return JSONEncoder.default(self, obj)
|
||||
|
||||
|
||||
class ApiApp(App):
|
||||
def bootstrap(self):
|
||||
with self.app_context():
|
||||
import config
|
||||
import api
|
||||
from core.extensions import db, siwa
|
||||
self.config.from_object(config)
|
||||
# if config.SENTRY_DSN:
|
||||
# sentry.init_app(self)
|
||||
|
||||
# if config.CELERY_BROKER_URL:
|
||||
# celery.init_app(self)
|
||||
|
||||
db.init_app(self)
|
||||
|
||||
siwa.init_app(self)
|
||||
|
||||
api.init_logger(self)
|
||||
api.init_app(self)
|
||||
|
||||
self.json_encoder = CustomJSONEncoder
|
||||
|
||||
|
||||
class ClientApp(App):
|
||||
def bootstrap(self):
|
||||
super().bootstrap()
|
||||
with self.app_context():
|
||||
import config
|
||||
from core.extensions import db
|
||||
|
||||
self.config.from_object(config)
|
||||
|
||||
db.init_app(self)
|
Reference in New Issue
Block a user