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()