From c37bb15737a39afb90e17e88ec338706a89e43ba Mon Sep 17 00:00:00 2001 From: AdminWhaleFall Date: Sat, 16 Apr 2022 14:48:31 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A6=84=20refactor:=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=20flask=5Fapp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api.json | 9 ---- flask_app/__init__.py | 41 +++++++++++++----- flask_app/data.db | Bin 40960 -> 40960 bytes flask_app/model.py | 20 +++++++-- .../templates/{admin.html => admin_back.html} | 0 flask_app/templates/api_edit.html | 9 ++++ flask_app/views/__init__.py | 2 +- flask_app/views/error.py | 16 +++++++ flask_app/views/views.py | 2 +- run.py => run_fask_app.py | 10 ++++- 10 files changed, 81 insertions(+), 28 deletions(-) rename flask_app/templates/{admin.html => admin_back.html} (100%) create mode 100644 flask_app/templates/api_edit.html create mode 100644 flask_app/views/error.py rename run.py => run_fask_app.py (83%) diff --git a/api.json b/api.json index fba3228..cb0b470 100644 --- a/api.json +++ b/api.json @@ -517,15 +517,6 @@ "sendType": "4" } }, - { - "desc": "志睿择", - "url": "https://www.vipexam.cn/user/identifyingCode.action", - "method": "POST", - "header": "", - "data": { - "phone": "[phone]" - } - }, { "desc": "漏洞银行", "url": "https://www.bugbank.cn/api/verifymobile", diff --git a/flask_app/__init__.py b/flask_app/__init__.py index 01e1d78..3b07407 100644 --- a/flask_app/__init__.py +++ b/flask_app/__init__.py @@ -2,7 +2,11 @@ # app 工厂函数 from flask import Flask from flask_sqlalchemy import SQLAlchemy -import sys,os +from flask_admin import Admin +from flask_admin.contrib.sqla import ModelView +from flask_babelex import Babel +import sys +import os from loguru import logger @@ -22,19 +26,34 @@ logger.add( backtrace=True ) - - app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = prefix + \ - os.path.join(app.root_path, 'data.db') -app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭对模型修改的监控 + +# app config + + +class AppConfig: + SQLALCHEMY_DATABASE_URI = prefix + \ + os.path.join(app.root_path, 'data.db') # 数据库路径 + SQLALCHEMY_TRACK_MODIFICATIONS = False # 关闭对模型修改的监控 + FLASK_ADMIN_SWATCH = "cerulean" # admin 主题 + + # 密钥 + SESSION_TYPE = 'filesystem' + SECRET_KEY = os.urandom(24) + + BABEL_DEFAULT_LOCALE = 'zh_CN' # 汉化 + + +app.config.from_object(AppConfig) + +# 扩展 db = SQLAlchemy(app) +babel = Babel(app) + +admin = Admin(app, name="短信接口调试", template_mode='bootstrap3') +from .model import ApisModelVies,Apis +admin.add_view(ApisModelVies(Apis, db.session)) # buleprint from .views import main as main_blueprint app.register_blueprint(main_blueprint) - - - - - diff --git a/flask_app/data.db b/flask_app/data.db index ec549782519f505446f8466032c6bc94d353ec88..40d170084861d49904c5f2d116bddf6efaa9d1e4 100644 GIT binary patch delta 3856 zcmeH~du$X%9LHyFcJ}slw>_lPBDJN6*T-FZx9zp}YAXt8U(|}AP)n(n($YeEeV|ZF zyY+#gRH;7||4~E}G*Q$-u$m}Vq8R>Aqlw1&h>Fn|B~cSKqGFueQV!EDe{VCmGvu@Waaetbml6#Zkw1ENyVsrQ_H$rdSjjK zee0T<`}?}A|4q%^?Y&L@_*r1xNvt5sicSA1URCs8^`8!=WMyDyQ8-W%HjIMefZy=> zA>vxeOM6^5@{&HQo0rCBZE>BO%XB)Sd-ZV2xoVH&-i8)V+pIxNZyTR+e0DpZaj633 zeb4g^-%h=qPbk6R#-xNF&UudyeL3v|zK?DSH(Yj{Q@7U%2kRESLO6LOKn~7d;>Mh8 z5*vIv*w3rWF?_Q0wP<`i*c{jk*@<2dpAL3lR^-z~WWVtli!YdXiPvp-500RHZo=?Z%_~0YE_Svu0QCQbX1b#c$e)~dX4R8`3I>Aw_uOFP}@rP zqC?6WZLv7dzD0NC+g?#mpgWa!<9!#9W(>=Q@@QEx*@$81RX#DgNH8gel*%ZLl#*Ty z_cRyLa6W0kkX7ZTp%N0qAXOXopeYC=Du(^lL$uUNw6P{nELkj=O#HZ}f(ERn^|b~q zwh~ROD-w&Qv)8vqsgXxkVfelEQqeyhGq%2h`mC7IJ%+u|vmiN!-p(AF6D5Nf zHgyI?_jLDr15tWu5$V7%c1NMOuv#$FG0eMjDZRu`)?-*x>ZJ>;n7Zvjnr$U~G3cT5 zt=itZJTxnZtiW(IbcvXGg<#4Us>0>s#nZ{J+!3W2)_A?K!%gQ|F%_d8dQpIMVR(Af zPv=@S-%dYGxB6RK=A{>wks%CqVUFT{M>n zw>jA8UN%K(A-M^|v+4O%utv|!2vQOvY+|~XdgJecICE22Kal19A7TFzVbcgnLfEwY zw+I_L7wHQ2po`Jh2pwK>B#tN63GkEYWRmFl7B#c zI1dsjYfw2)BDP(GcoL}|R0tf2)KTQ+Nu(`CyU&M2j!7H^i$ts@o+goF65aPVB+~QI z{y!rTgU#d9Bx1Fj;cOBGsLe~7Wf<6&cfjXLf>5UaC4T$Yyijg#<5lE=H_aZ-zYOL> z{YV#YRtAb5=GwLAg4xl)iCsBxqNAA;2i(xuxslH}9Jq&t`qpB4aVW>4G_McY=gIP0x#)q}@a^3jujPozmQ$wGhV;kuRz0Z8 z&X1f=I%AGk9b=A_j!f+XZB$#XrK%^?DfKS(I^_#xgA$N`laI>x%QwkI(r?mHX}8oi z5zCf@#71t_EEks8pcCFHv8g7^Ny6jIY~NH(n1zIwJ7bH)yfeEyRT7ru&kWv-wV{~_ zOOo(!XL&B(=`mACgERh(7S0$4yOgjCR6K15*h`o&QwjTGjRb=?ElHS`87m=@Gp+>7 z2Zn`|Y+a&A?{WU(3_1=uBHA&nS{+orS4{awxmEg3%9ZFu>=U~?yWIMULTHiUGYqe< z*y}IJ@)w7FMPYw&!RcLdaT!F1p5vB4Ulcyu-O4W@Edn2}O~Qd32D5U2ORy;fTGd*9 zt$km$jh6lC(Mi delta 2499 zcmZ`)X-rgC6n@KWZ|2Q=AZ|foMG!>+K?MX{5UJIob>Hg7HVgwe%nUOu4%=l&t!pKx zt%?lVAB{^|E701_7Hj%L+q6+@npUhy)1r-SYBjYn*3{m6-w5wbS`zNP=eyrIciz3< zm(zNlYdy~$h#tY{7=|(9|EGU!N79T4jHVPEuwsmr6Bs$6$L*6~MPa_Mo;8jcHHr;H z!XJ{COG^ctydlP%sK-pBJV0ug<-g^>@jH)CJ1OM z9!*HXqtTBC!!|tV7ve!T9S?j|Z*KC_lzs`0#u<7GBMBhGgralsRf5ck$uJKgxSSwz zOcH#Je2^Mz;hLtw$~F%{p|KC!(LHn+Pd5!v?B%Hzur zollpw(0Pts!N0eEhGPj%l-m`aBS7af4lkLxnDOx1t`1u2YK4zbIZq6HxZAFrISx|x zC}(=2;n*HKCB9Sj63rFI!drV0CAN%#oPA!h%f*d`Pxl?7#79m)t>_;KclWypF_pZ@ zNM<7=d!$FwZ0md09PyG^U}-YnGw(2)g=W)TQ-iVBaKo@pKb~F6Z0v9+^2oIiPE8q< zW@e{mq@-nL&X|?Db9r80F!6I;K%JS=MvbsbZ1kj>TjC$Gly*C6t>UnqD$3QZ{2J~um&TrE zabkzt&ed##Q{^^z^0HnWx>l#Myv$qE4zjX#VcTL?0Tz8NY3T(Mr?^1X?y`9C%QHA&@F=l6B{&;v=qj~ z1=M+-0yrLLS0lC0!?^fLHR4+W5MQAwv}iF{CVi}d)?IN%xRBA{?&%(`w zZ#9rDA1+M3UZDCqMLea9oGO8&xBA5I#7$T}E#_~`YlJI8o~h3Gt8t5A&=99Trccnl ztIOcaxf`5~eZV@H>r82fJD&6UsUfuD5qD5)XhETYnnd#?&U)$=jKvH|##i^>wh60N z3x9U{!*o*MgVrOTKyI7r)f>IAtjnoYf~y9;>?+ps>OC+wSP@o`al;2ePZ&7g1v%Y4 z+KRQ+@VL7?jA(I!?`RV_MkP97JG@>P{=*knfv2@!#S$xV3kawHrUEyDx?!z0IdC`d zstAeY&|Gpv`%Mlz?hl2-N!4YzNvPcCx8Y8qc0_b3477Kss#;560`3{wySEg>nX;xZ zFuDll+4qKl%L-w@-cP{Hq4y=Ki(+hyoF$c5e-Pg^T{Ye`JTOG)59)QgZ2khjguBM& zu^+KH%omKU!=1?&BZ(LjTmcL3L{?%+x^6@wF(X;)kPcah4V6GbW@13f@*sg&kFINx ziI|SAeaJ}crX(yv24XZNkddBPER>-m=2A9_5KnBS1UAGGLn(m^v7`ynVCQng(Dp+j zzAe3l_8l4^zL_)}WxcwIbQ)!y-$+{wz9?bnqIz3(5%Cem(TrRp{VY{lPgvu{lVXPD zee*BoO~Oxt$24eKYrJV3-Q)h?%?f!<<_plwki{gv5zPo$OX6K9Eo3Q)uScmND@C%?L;jKZ`6wl18;P$) W$sxPQyagpumz-}SCrt~PL;4p15+%9- diff --git a/flask_app/model.py b/flask_app/model.py index e03bf1f..b178e41 100644 --- a/flask_app/model.py +++ b/flask_app/model.py @@ -2,12 +2,24 @@ # 储存数据库模型 from . import db from datetime import datetime +from . import ModelView + +class ApisModelVies(ModelView): + create_template = 'api_edit.html' + edit_template = 'api_edit.html' + # 在当前页面编辑 + # create_modal = True + # edit_modal = True + # 启用搜索 + column_searchable_list = ['desc'] + # 可以导出 csv + can_export = True class Apis(db.Model): id = db.Column(db.Integer, primary_key=True) # 主键 - desc = db.Column(db.String(100)) # 描述 - url = db.Column(db.String(100)) # 链接 - method = db.Column(db.String(10)) # 请求方法 + desc = db.Column(db.String(100), default="Default") # 描述 + url = db.Column(db.String(100), unique=True, nullable=False) # 链接 + method = db.Column(db.Enum("GET","POST"), nullable=False) # 请求方法 header = db.Column(db.String(9999)) # 请求头 data = db.Column(db.String(9999)) # 请求数据 - add_time = db.Column(db.DateTime(), default=datetime.now()) # 添加时间 + add_time = db.Column(db.DateTime(), default=datetime.now) # 添加时间 diff --git a/flask_app/templates/admin.html b/flask_app/templates/admin_back.html similarity index 100% rename from flask_app/templates/admin.html rename to flask_app/templates/admin_back.html diff --git a/flask_app/templates/api_edit.html b/flask_app/templates/api_edit.html new file mode 100644 index 0000000..ba478b6 --- /dev/null +++ b/flask_app/templates/api_edit.html @@ -0,0 +1,9 @@ +{% extends 'admin/model/edit.html' %} + +{% block body %} +

短信接口添加

+

替换字符: 手机号[phone] 时间戳[timestamp]

+{{ super() }} + +{% endblock %} + diff --git a/flask_app/views/__init__.py b/flask_app/views/__init__.py index cd43d14..b611d9b 100644 --- a/flask_app/views/__init__.py +++ b/flask_app/views/__init__.py @@ -2,5 +2,5 @@ from flask import Blueprint main = Blueprint("main",__name__) -from . import views +from . import views, error from .. import db \ No newline at end of file diff --git a/flask_app/views/error.py b/flask_app/views/error.py new file mode 100644 index 0000000..024ce68 --- /dev/null +++ b/flask_app/views/error.py @@ -0,0 +1,16 @@ +#!/usr/bin/python python3 +# coding=utf-8 +from . import main +from flask import redirect, url_for + + +@main.app_errorhandler(404) +def page_not_found(e): + """注册应用全局错误处理""" + print("404") + return redirect(url_for('main.index')) + + +@main.app_errorhandler(401) +def authfail(e): + return redirect('/static/401.jpg') \ No newline at end of file diff --git a/flask_app/views/views.py b/flask_app/views/views.py index 961f098..ca59619 100644 --- a/flask_app/views/views.py +++ b/flask_app/views/views.py @@ -1,7 +1,7 @@ # encoding=utf8 # flask app views from . import main -from .. import db +from flask_app import db @main.route("/",methods=['GET','POST']) def index(): diff --git a/run.py b/run_fask_app.py similarity index 83% rename from run.py rename to run_fask_app.py index 45762ab..38cdd4d 100644 --- a/run.py +++ b/run_fask_app.py @@ -36,8 +36,14 @@ def json2sqlite(): header=str(js['header']) ) # print(api.desc) - db.session.add(api) - db.session.commit() + try: + db.session.add(api) + db.session.commit() + logger.info(f"{api.desc} 写入成功!") + except Exception as e: + db.session.rollback() # 回滚 + logger.error(f"{api.desc}写入数据库错误:{e}") + logger.success("json To sqlite 成功!")