
    )h                     p   d Z ddlZddlZddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ  ee      Z ej*                  ej,                  	       ej.                  Zej0                  j3                  d
      xs dZej0                  j3                  d      xs dZ	 ej9                  d      rej:                  j=                  e       n$ddlmZ ej:                  j?                  ee           ejF                  e        eee      Z$ ee      Z% e       Z&e&jG                  e       de&_'        de&_(        de&_)        e&jT                  d        Z+d Z, e,        ejZ                  d        Z.ej_                  d      d        Z0ejc                  d      d        Z2ejc                  d      d        Z3ejc                  e       d        Z4ej_                  d      d        Z5ed k(  rej:                  j3                  d!d"      Z6ej:                  j3                  d#d$      Z7ej:                  j3                  d%d&      Z8ejs                  d'       ejs                  d(e6        ejs                  d)e7 d*e8        eju                  e6e7e8+       yy# e $ rZ!ejE                  de!         dZ![!ww xY w),z$
Linguotree Application Entry Point
    N)Flaskrender_templaterequestsession)
SQLAlchemy)Migrate)LoginManager)CSRFProtect)db)level	FLASK_ENVdefaultCONFIG_MODULEconfigz.py)r   u0   ❌ 配置加载失败，请检查配置文件: z
auth.loginu!   请先登录以访问此页面。infoc                 V    ddl m} |j                  j                  t	        |             S )u   从数据库加载用户r   )User)models.userr   querygetint)user_idr   s     /var/www/html/app.py	load_userr   9   s     !::>>#g,''    c                  .   	 ddl m} m}m}m} ddlm} ddlm} ddl	m
} ddlm} ddlm} ddlm}	 dd	lm}
 t&        j)                  |d
       t&        j)                  |       t&        j)                  |d       t&        j)                  |d       t&        j)                  |d       t&        j)                  |	d       t&        j)                  |
d       t*        j-                  d       y # t.        $ r}t*        j1                  d|         d }~ww xY w)Nr   )userteacherstudentpayment)auth_bp)main_bp)
student_bp)
teacher_bp)	course_bp)
booking_bp)admin_bpz/auth)
url_prefixz/studentz/teacherz/coursez/bookingz/adminu   ✅ 蓝图注册成功u   ❌ 蓝图注册失败: )modelsr   r   r   r    routes.authr!   routes.mainr"   routes.studentr#   routes.teacherr$   routes.courser%   routes.bookingr&   routes.adminr'   appregister_blueprintloggerr   	Exceptionerror)r   r   r   r    auth_blueprintmain_blueprintstudent_blueprintteacher_blueprintcourse_blueprintbooking_blueprintadmin_blueprintes               r   register_blueprintsr>   @   s    :: 	:9BB?B< 	~'B~.0ZH0ZH/IF0ZH8D,- /s34s   C*C- -	D6DDc            	         	 ddl m} m}m} | j                  j                         }|j                  j                         }|j                  j                         }d}d}	 ddl m} t        j                  j	                  t        j                  j                  |j                              j                         }	|	t        |	      nd}d||||t'        |d      d	iS # t        t        t         f$ r"}
t"        j%                  d|
        Y d}
~
Ed}
~
ww xY w# t         $ r,}
t"        j%                  d
|
        ddddddd	icY d}
~
S d}
~
ww xY w)u   
    向所有模板注入系统统计数据。
    使用分层异常处理，确保即使部分模型缺失也不会导致页面崩溃。
    r   )r   TeacherStudentg        )PaymentNuB   ⚠️ 支付模型未就绪或查询失败，跳过收入统计: stats   )total_userstotal_teacherstotal_studentspending_teacherstotal_revenueu3   ⚠️ 统计数据加载失败，返回默认值: )r)   r   r@   rA   r   countrB   r   r   funcsumamountscalarfloatImportErrorAttributeErrorr4   r3   warninground)r   r@   rA   rE   rF   rG   rH   rI   rB   revenue_resultr=   s              r   inject_statsrU   _   s?   (
11jj&&( ,,. ,,.  	e&ZZ--bggkk'...IJQQSN5C5OE.1UXM
 *"0"0$4!&}a!8
 	
 ^Y7 	eNN_`a_bcdd	e  

LQCPQ "#"#$%!$
 	


sI   AD A)C D D0DD DD 	E
!E?E
E
/c                      t        d      S )u   首页路由z
index.htmlr    r   r   indexrZ      s     <((r     c                     t        d      dfS )u   404 页面未找到z404.htmlr[   rX   r=   s    r   page_not_foundr^           :&++r     c                     t        d      dfS )u   500 服务器内部错误500.htmlr`   rX   r]   s    r   internal_server_errorrc      r_   r   c                 P    t         j                  d|  d       t        d      dfS )u0   捕获未预期的异常（调试时可关闭）u   💥 未处理异常: T)exc_inforb   r`   )r3   r5   r   r]   s    r   handle_exceptionrf      s,     LL)!-L=:&++r   z/healthzc                      	 t         j                  j                  d       dt        t	        j                               ddfS # t
        $ r(} t        j                  d|         ddidfcY d	} ~ S d	} ~ ww xY w)
u8   健康检查接口，Kubernetes 或负载均衡器可用zSELECT 1ok)status	timestamp   zHealth check failed: ri   r5   r`   N)r   r   executer   timer4   r3   r5   r]   s    r   health_checkrn      sh    (


:&S-=>CC (,QC01'"C''(s   A A 	A4A/)A4/A4__main__DEBUGFHOSTz	127.0.0.1PORTi  u    🚀 启动 Linguotree 应用...u   🔧 调试模式: u   🌐 访问地址: http://:)debughostport);__doc__osloggingrm   flaskr   r   r   r   flask_sqlalchemyr   flask_migrater   flask_loginr	   flask_wtf.csrfr
   
extensionsr   __name__r1   basicConfigINFOr3   environr   envconfig_moduleendswithr   from_pyfilefrom_objectr4   r=   r5   init_appmigratecsrflogin_manager
login_viewlogin_messagelogin_message_categoryuser_loaderr   r>   context_processorrU   routerZ   errorhandlerr^   rc   rf   rn   
debug_moderu   rv   r   runrY   r   r   <module>r      s   
   : : ' ! $ & Ho   ',, '	 	jjnn[!.Y

/;8	
e$

}- 	"

vc{+ C 
#r
 3    s ' A '- $ ( (8   -
 -
b 3) )
 #, , #, , ), , :( ( z/J::>>&+.D::>>&$'D
KK24
KK%j\23
KK,TF!D6:;GG   c  

LLCA3GH	
s   )AJ J5J00J5