HEX
Server: Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/7.4.30
System: Windows NT website-api 10.0 build 20348 (Windows Server 2016) AMD64
User: SYSTEM (0)
PHP: 7.4.30
Disabled: NONE
Upload Files
File: C:/github_repos/ho-xsj-website/app.py
import time
import math
from flask import Flask
from flask import g
from flask_script import Manager
from config import config
from models import db
from utils.log import log
import traceback
from waitress import serve
from paste.translogger import TransLogger
from flask_cors import CORS


def configure_log(app):
    # 设置 log
    if not app.debug:
        import logging
        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(logging.INFO)
        app.logger.addHandler(stream_handler)


def register_routes(app):
    # 注册蓝图
    # from routes.api_1_0.student import main as routes_api_1_0_student
    # app.register_blueprint(routes_api_1_0_student, url_prefix='/api/v1.0/student')
    # from routes.api_1_0.parent import main as routes_api_1_0_parent
    # app.register_blueprint(routes_api_1_0_parent, url_prefix='/api/v1.0/parent')
    from routes.api_1_0.teacher import main as routes_api_1_0_teacher
    app.register_blueprint(routes_api_1_0_teacher, url_prefix='/api/v1.0/teacher')
    from routes.api_1_0.public import main as routes_api_1_0_public
    app.register_blueprint(routes_api_1_0_public, url_prefix='/api/v1.0')
    from routes.main import main as routes_main
    app.register_blueprint(routes_main, url_prefix='')


def configured_app(config_name):
    app = Flask(__name__, static_folder='./web/dist/static', template_folder='./web/dist')
    # CORS(app)
    app.secret_key = 'niasdpjoiksdoahfosdoafh'
    c = config[config_name] or config['development']
    app.config.from_object(c)
    c.init_app(app)
    db.init_app(app)
    register_routes(app)
    configure_log(app)
    return app

app = configured_app('production')
# manager = Manager(app)
# app.run(host='0.0.0.0', port=5004, threaded=True)

serve(TransLogger(app), host='0.0.0.0', port=5004)


@app.before_request
def before_request():
    g.start = time.time() * 1000


@app.after_request
def after_request(response):
    # 每一次请求结束前,保存修改到数据库
    db.session.commit()
    return response


@app.errorhandler(500)
def error_500(e):
    from flask import request
    import traceback
    form = request.json
    log('form:{} \n error:{}'.format(form, traceback.format_exc()))
    from routes.api_1_0 import json_response
    response = json_response(1000, '服务端错误,本次故障已记录,我们会尽快修复', {})
    return response


@app.after_request
def log_request_time(response):
    from flask import request
    from utils.log import log_time
    if request.endpoint and 'static' not in request.endpoint:
        diff = math.ceil(time.time() * 1000 - g.start)
        log_time('{} 耗时 {} ms'.format(request.url_rule, diff))
    return response


@manager.command
def test():
    """Run the unit tests."""
    import unittest
    tests = unittest.TestLoader().discover('tests')
    unittest.TextTestRunner(verbosity=2).run(tests)


@manager.command
def deploy():
    """添加测试数据"""
    from utils.log import log
    database = app.config['SQLALCHEMY_DATABASE_URI']
    from models.apply import Apply
    from models.collection import Collection
    from models.student import Student
    from models.teacher import Teacher
    from models.lesson import Lesson
    from models.teacher_video import TeacherVideo
    from models.article import Article
    from models.verification_code import VerificationCode
    from models.game import Game
    from models.student_game import StudentGame
    from models.school import School
    from models.video import Video
    from models.student_video import StudentVideo
    from models.special_column import SpecialColumn
    from models.live import Live
    from models.parent import Parent
    from models.live_subscription import LiveSubscription
    from models.subscription import Subscription
    from models.game_shell import GameShell
    from models.parent_video import ParentVideo
    from models.parent_lesson import ParentLesson
    from models.game_little_question import GameLittleQuestion
    from models.student_log import StudentLog
    from models.stu_little_question import StudentLittleQuestion
    from models.weekly_publication import WeeklyPublication
    from models.stu_wrong_record import StudentWrongRecord
    from models.banner import Banner
    from models.message import Message
    from models.learn_history import LearnHistory
    from models.stu_learn_time import StudentLearnTime
    from models.student_lesson import StudentLesson
    from models.token import Token
    from models.app_config import AppConfig
    db.drop_all()
    db.create_all()
    Apply.insert_test_date()
    Collection.insert_test_date()
    Parent.insert_test_date()
    Teacher.insert_test_date()
    Article.insert_test_date()
    VerificationCode.insert_test_date()
    GameLittleQuestion.insert_test_date()
    GameShell.insert_test_date()
    StudentGame.insert_test_date()
    School.insert_test_date()
    StudentVideo.insert_test_date()
    LiveSubscription.insert_test_date()
    SpecialColumn.insert_test_date()
    Live.insert_test_date()
    StudentWrongRecord.insert_test_date()
    Banner.insert_test_date()
    StudentLittleQuestion.insert_test_date()
    Message.insert_test_date()
    ParentVideo.insert_test_date()
    ParentLesson.insert_test_date()
    LearnHistory.insert_test_date()
    StudentLearnTime.insert_test_date()
    TeacherVideo.insert_test_date()
    AppConfig.insert_test_date()
    Token.insert_test_date()
    log('添加测试数据完成')


# 自定义的命令行命令用来运行服务器
@manager.command
def server():
    # deploy()
    app.run()


if __name__ == '__main__':
    manager.run()