使用python构建一个简单的发布系统
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用python构建一个简单的发布系统,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2607字,纯文字阅读大概需要4分钟。
内容图文
一、流程
通过前端上传要发布的压缩包,逻辑端获取后将压缩包分发到远程服务器上,并执行远程服务器上使用shell编写的发布脚本,实现代码发布。
二、前端文件上传代码
<form id="codeForm" method=‘post‘ action=‘/code/‘ class="form-horizontal nice-validator n-yellow" novalidate="novalidate" enctype=‘multipart/form-data‘> <div class="form-group"> <label for="package" class="col-sm-2">需要上传的包<span class="red-fonts">*</span></label> <br> <div class="col-sm-12"> <input id="package" name="package" type="file" datatype=‘*‘/><!-- 上传时type为file --> </div> </div> </form>
三、逻辑端
1、保存文件到指定位置
import os fpath = ‘/usr/local/zip/‘ file = request.files.get(‘package‘) # 获取压缩包 filename = secure_filename(file.filename) # 确保文件格式正确 if ‘.‘ in filename and filename.split(‘.‘,1)[1] == ‘zip‘: # 确保文件是*.zip格式 where = os.path.join(fpath,filename) file.save(where) # 保存为where指定的路径
2、将文件分发到远程服务器,并执行远程命令
app.config.from_object(RemoteHost) hosts = [] for i in app.config: if re.findall(‘HOST.‘,i): # 正则匹配HOST.类型 hosts.append(app.config.get(i)) # hosts格式为[[‘192.168.1.100‘, 22, ‘root‘, ‘123456‘],[‘192.168.1.101‘, 22, ‘root‘, ‘123456‘],...] def trans(where,filename): ssh = paramiko.SSHClient() # 初始化ssh对象 comm = ‘/root/test.sh ‘+where # 远程服务器上要执行的命令 for i in hosts: # 文件传输 tus = (i[0],i[1]) t = paramiko.Transport(tus) t.connect(username=i[2],password=i[3]) sftp = paramiko.SFTPClient.from_transport(t) # 初始化sftp对象 sftp.put(where,‘/tmp‘+filename) # 传输到‘/tmp‘下 t.close() # 执行远程命令 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机(可选项) ssh.connect(i[0],i[1],i[2],i[3],timeout=10) stdin,stdout,stderr = ssh.exec_command(comm) # 执行远程命令 ssh.close()
四、数据端
将前端获取的一些其他数据保存到数据库
data = dict((k,v[0]) for k,v in dict(request.form).items()) # message, key, project key = data.pop(‘key‘) data[‘update_persion‘] = session.get(‘name‘) # 添加执行人 data[‘package‘] = filename # 添加上传的包名 conditions = [ "%s=‘%s‘" % (k,v) for k,v in data.items()] if key == ‘abcde‘: # 许可码正确就执行操作 try: trans(where,filename) db.add(‘code‘,conditions) # 写入数据库 return render_template(‘/code/code.html‘,result=‘更新成功!‘,role = role) except Exception, e: errmsg = ‘失败信息 error: ‘+str(e) return render_template(‘/code/code.html‘,result=errmsg,role = role) else: return render_template(‘/code/code.html‘,result=‘许可码无效!‘,role = role)
效果图
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108011358835.jpg" title="QQ截图20161122151002.png" />
更新历史
650) this.width=650;" src="/upload/getfiles/default/2022/11/8/20221108011359096.jpg" title="QQ截图20161122151254.png" />
原文:http://yaoliang83.blog.51cto.com/10991353/1875436
内容总结
以上是互联网集市为您收集整理的使用python构建一个简单的发布系统全部内容,希望文章能够帮你解决使用python构建一个简单的发布系统所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。