插件宝塔

宝塔  时间:2021-01-27  阅读:()
宝塔Linux面板插件开发文档插件安装位置:/www/server/panel/plugin/文件结构:demo_main.
py插件后端主程序(插件名称_main.
py)index.
html插件前端程序info.
json插件信息文件icon.
png插件图标文件install.
sh安装卸载脚本插件名称_main.
py内容格式以插件名称为demo示例:#!
/usr/bin/python#coding:utf-8classdemo_main:#必需与文件名一致#你的代码defget_list(self,args):#如果此方法需要被前端调用,则通过args接收前端传过来的POST/GET参数pass;info.
json内容格式:{"title":"宝塔插件DEMO",//标题名称"name":"demo",//名称,必需和插件目录名一致"ps":"宝塔插件开发示例项目",//描述"versions":"1.
0",//版本号"checks":"/www/server/panel/plugin/demo",//用于检测插件是否安装的文件或目录"author":"宝塔",//作者"home":"https://www.
bt.
cn"//作者主页}响应数据到前端:允许return到前端的数据类型:bool、str、list、dict、int不管响应什么类型的数据,都将自动转为json数据格式,若不被json对象支持,会直接报错Demo下载:https://www.
bt.
cn/demo.
zip注意:1、URL是严格大小写的2、前端请求插件请统一使用POST方式3、更详细的说明请参考demo4、在POST参数中请不要使用action、s、name、a这4个参数名public公共库引用:importpublic读取文件#@paramfilename文件名[必传]#@parammode文件打开模式默认r#@returnboolf_body=public.
ReadFile(filename,mode='r')写入文件#@paramfilename文件名[必传]#@paramf_body要写入的内容[必传]#@parammode文件打开模式默认w+#@returnboolresult=public.
WriteFile(filename,f_body,mode='w+')计算字符串的MD5#@paramstrings要被计算的字符串[必传]#@returnstring小写的MD5结果md5=public.
md5(strings)计算文件的MD5#@paramfilename文件名#@returnstring小写的MD5结果file_md5=public.
FileMd5(filename)写面板日志#@paramlog_type日志类型[必传]如:登录面板#@paramlog_body日志内容[必传]如:登录成功#@returnNonepublic.
WriteLog(log_type,log_body)使用GET方式请求HTTP#@paramurlURL地址[必传]#@paramtimeout超时时间默认60秒#@returnstring成功返回http响应内容,失败返回错误代码http_body=public.
HttpGet(url,timeout=60)使用POST方式请求HTTP#@paramurlURL地址[必传]#@paramp_dataPOST内容,请传入字典(dict)[必传]#@paramtimeout超时时间默认60秒#@returnstring成功返回http响应内容,失败返回错误代码http_body=public.
HttpPost(url,p_data,timeout=60)取随机字符串#@paramlength要获取的随机字符串长度[必传]#@returnstringrandmo_string=public.
GetRandomString(length)构造通用响应内容#@paramstatus响应状态[必传]True|False#@paramreturn_msg响应内容[必传]returnpublic.
ReturnMsg(True,'操作成功!
')取指定文件的权限#@paramfilename文件名[必传]#@returnstring权限字符器如755f_mode=public.
GetFileMode(filename)取当前使用的web服务器#@returnstring服务器类型nginx|apacheweb_server=public.
GetWebServer()重载当前web服务器public.
ServiceReload()重载指定PHP版本#@paramversionPHP版本如要重载php7.
2:72public.
phpReload()通过管道执行SHELL命令#@paramshell_str要被执行的SHELL命令[必传]#@returnlist命令执行结果返回格式:["正常输出","异常输出"]result=public.
ExecShell(shell_str)获取本服务器IP地址#@returnstringIP地址ip=public.
GetLocalIp()获取用户IP地址#@returnstringIP地址client_ip=public.
GetClientIp()获取当前访问的HOST及端口信息#@paramport返回端口[选传]True|False默认为Falsehost=public.
GetHost()port=public.
GetHost(True)取文件尾指定行数的内容#@praamfilename文件名[必传]#@paramnum指定要取的行数[必传]#@returnstring获取到的内容last_body=public.
GetNumLines(filename,num)字节单位转换(KB,MB,GB,TB)#@paramb_size要被转换的字节数[必传]#@returnstring转换结果size=public.
to_size(b_size)判断指定进程是否存在#@paramprocess_name进程名[必传]#@paramexe执行文件路径[选传]默认为None不判断,若传入值,验证执行文件路径#@returnboolis_exists=public.
process_exists(process_name,exe=None)取服务器mac地址mac_address=public.
get_mac_address()重启面板public.
restart_panel();取当前格式化时间#@paramformat格式,默认为%Y-%m-%d%X2018-12-1000:00:00format_date=public.
getDate(format='%Y-%m-%d%X')#XSS过滤#@paramdata要被过滤的字符串[必传]input_body=public.
checkInput(data)获取面板自带数据库的sqlite数据库对象#@paramtable表名#@return数据库对象db_obj=public.
M('sites')面板数据库对象方法列表(注意:以下示例仅是数据库操作,实际添加、删除、修改请从前端调用对应接口完成操作)获取站点id为1或2的网站列表data=public.
M('sites').
where('id=orid=',(1,2)).
field('id,name,edate,path,status').
select()获取所有网站列表并使用id降序data=public.
M('sites').
field('id,name,edate,path,status').
order('iddesc').
select()获取符合条件的一条数据find=public.
M('sites').
where('id=',(id,)).
field('id,name,edate,path,status').
find()通过网站名称获取网站idsite_id=public.
M('sites').
where('name=',('www.
bt.
cn',)).
getField('id')通过网站ID获取域名列表并使用id升序domains=public.
M('sites').
where('pid=',(site_id,)).
order('idasc').
field('id,pid,name,port,addtime').
select()删除日志public.
M('logs').
where('id=',(id,)).
delete()修改数据public.
M('logs').
where(id=,(id,)).
save('type,log','登录','登录成功!
')执行sql语句返回受影响行public.
M('logs').
execute(sql)执行sql语句返回查询结果public.
M('logs').
query(sql)构造分页数据#@paramcount数据行数[必传]#@paramp当前页默认=1#@paramrows每页行数默认=12#@paramcallbackjs回调方法名称,如果您是通过JS调用分页数据,请传入js回调方法名称#@paramresult分页结构默认='1,2,3,4,5,8',完整的是:'1,2,3,4,5,6,7,8'请根据需求调整#@return{'page':构造好的颁布数据,'shift':偏移位置,'row':偏移量}page_data=public.
get_page(count,p=1,rows=12,callback='',result='1,2,3,4,5,8')示例:获取网站数据并构造分页#取网站数量count=public.
M('sites').
count()取分页数据page_data=public.
get_page(count,p=1,rows=12,callback='get_sites_list',result='1,2,3,4,5,8')#通过page_data['shift'],page_data['ros']获取数据列表site_list=public.
M('sites').
order('iddesc').
limit(page_data['shift'],page_data['ros']).
field('id,name,edate,path,status').
select()#构造返回字典data={'data':site_list,'page':page_data['page']}returndata任务队列对象引用模块:importpanelTask实例化对象:t=panelTask.
bt_task()创建任务队列result=t.
create_task(task_name,task_type,task_shell,other='')参数说明:#@paramtask_name字符串任务名称[必传](可以是中文)#@paramtask_type整数任务类型[必传]0.
执行SHELL1.
下载文件2.
解压文件3.
压缩文件#@paramtask_shell字符串SHELL命令[必传]如果task_type=0,请传入SHELL命令如果task_type=1,请传入URL地址如果task_type=2,请传入压缩包文件全路径如果task_type=3,请传入被压缩的文件或目录的父路径(完整)#@paramother字符串其它参数[必传]如果task_type=0,此参数可不传如果task_type=1,请传入用于保存下载文件的全路径如:/www/test.
zip如果task_type=2,请传入JSON字符串,示例:{"dfile":"解压目录全路径","password":"解压密码(无密码请传空字符串)"}如果task_type=3,请传入JSON字符串,示例:{"sfile":"被压缩的文件或目录名称(非全路径)","dfile":"用于保存压缩包的全路径,如:/www/test.
zip","z_type":"压缩类型(示例:tar.
gz,rar,zip)"}执行SHELL命令示例:t.
create_task('查看分区',0,'df-h')下载文件:t.
create_task('下载文件test.
zip',1,'http://www.
bt.
cn/test.
zip','/www/test.
zip')解压文件到/www/test:t.
create_task('解压test.
zip',2,'/www/test.
zip','{"sfile":"/www/test","password":""}')压缩/www目录下的test目录到/www/test.
zip:t.
create_task('压缩test',3,'/www',{"sfile":"test","dfile":"/www/test.
zip","z_type":"rar"})插件动态路由前言:插件动态路由不继承面板会话权限,需开发者自己在插件(_check方法)中做好访问权限的控制,请谨慎使用访问方式:http://面板地址:端口/插件名称/被访问的插件方法.
响应类型(html|json)名词解释:插件名称:info.
json中的name字段值被访问的方法:插件控制器类中的方法名称,如demo_main类中的get_logs响应类型:html以模板的方式响应json响应json数据,若不加.
(html|json)则原样输出插件方法返回的数据插件静态文件主要用于访问插件中要用上的js/css/字体/html等,请不要将重要数据放到静态目录静态目录名称:static访问示例如要访问demo插件以下路径的静态文件:.
/static/js/test.
jshttp://demo.
cn:8888/demo/static/js/test.
js使用模板宝塔面板中使用jinja2模板引擎渲染模板,要在插件中使用jinja2模板,需在插件目录下创建templates目录,并创建对应方法的模板文件注意:在插件模板中支持jinja2语法,但无法使用extends语句模板包含(>=6.
9.
19测试版或>=6.
9.
5正式版)创建头部文件.
/templates/head.
html在模板任意位置插入包含语句{%include"head.
html"%}模板响应过程:用户请求>>检查访问权限(_check|login)>>检查模板是否存在>>执行方法>>输出模板变量关于模板变量:插件方法返回的数据将被传递到data变量中,请尽量在插件方法在构造dict返回给模板,在模板中请通过data变量来访问对应的数值使用示例:使用模板的方式访问demo插件中的get_logs方法1、创建模板文件.
/templates/get_logs.
html内容{{data['test']}}2、编写get_logs方法:defget_logs(self,args):return{'test':'test'}3、以模板的方式请求:http://demo.
cn:8888/demo/get_logs.
html4、响应内容test开发Ajax接口(响应JSON)要开发ajax接口,仅需要以json的响应类型访问即可,面板会自动将插件方法的返回值系列化为JSON字符串响应使用示例:http://demo.
cn:8888/demo/get_logs.
json自定义响应访问方式:http://demo.
cn:8888/demo/get_logs重定向示例代码:fromflaskimportredirect#引用重定向对象defget_logs(self,args):returnredirect('/login',302)#返回重定向对象重定向代码支持(302|301|303|305|307)直接输出HTML示例代码:defget_logs(self,args):html_body=""returnhtml_body输出文件示例代码:fromflaskimportsend_file#引用文件发送对象defget_file(self,args):returnsend_file('.
/test.
zip')

PhotonVPS:美国Linux VPS半价促销2.5美元/月起,可选美国洛杉矶/达拉斯/芝加哥/阿什本等四机房

photonvps怎么样?photonvps现在针对旗下美国vps推出半价促销优惠活动,2.5美元/月起,免费10Gbps DDoS防御,Linux系统,机房可选美国洛杉矶、达拉斯、芝加哥、阿什本。以前觉得老牌商家PhotonVPS贵的朋友可以先入手一个月PhotonVPS美国Linux VPS试试了。PhotonVPS允许合法大人内容,支持支付宝、paypal和信用卡,30天退款保证。Photo...

恒创科技SonderCloud,美国VPS综合性能测评报告,美国洛杉矶机房,CN2+BGP优质线路,2核4G内存10Mbps带宽,适用于稳定建站业务需求

最近主机参考拿到了一台恒创科技的美国VPS云服务器测试机器,那具体恒创科技美国云服务器性能到底怎么样呢?主机参考进行了一番VPS测评,大家可以参考一下,总体来说还是非常不错的,是值得购买的。非常适用于稳定建站业务需求。恒创科技服务器怎么样?恒创科技服务器好不好?henghost怎么样?henghost值不值得购买?SonderCloud服务器好不好?恒创科技henghost值不值得购买?恒创科技是...

易探云:香港大带宽/大内存物理机服务器550元;20Mbps带宽!三网BGP线路

易探云怎么样?易探云隶属于纯乐电商旗下网络服务品牌,香港NTT Communications合作伙伴,YiTanCloud Limited旗下合作云计算品牌,数十年云计算行业经验。发展至今,我们已凝聚起港内领先的开发和运维团队,积累起4年市场服务经验,提供电话热线/在线咨询/服务单系统等多种沟通渠道,7*24不间断服务,3分钟快速响应。目前,易探云提供香港大带宽20Mbps、16G DDR3内存、...

宝塔为你推荐
304和316不锈钢哪个好304不锈钢和316不锈钢哪个好锦天城和君合哪个好记忆棉和乳胶哪个好锦天城和君合哪个好和君智业和三人禾哪个公司的营销做的好ps软件哪个好怎么ps啊,哪个软件好核芯显卡与独立显卡哪个好独立显卡和核心显卡哪个好车险哪个好人保和平安车险哪个好红茶和绿茶哪个好红茶和绿茶哪个好?电动牙刷哪个好电动牙刷哪个牌子好?准备就买个几百块钱的?行车记录仪哪个好请问行车记录仪那个牌子好?网络机顶盒哪个好什么牌子的网络机顶盒最好
长沙域名注册公司 最便宜虚拟主机 sharktech simcentric raksmart uk2 java主机 BWH koss nerd sockscap 淘宝双十一2018 数字域名 789电视 me空间社区 佛山高防服务器 南通服务器 免费phpmysql空间 怎么建立邮箱 网通服务器 更多