web服务搭建

2023-11-17

【Python】吹爆Python!1行代码搭建Web服务器30行代码实现服务器的文件上传下载

需求:

 

手机每日下载图片,然后需经过本人编写的Python脚本处理一遍,再返回到手机上。

个人电脑不能保证时刻开机在线,自己也不可能一直在电脑旁边,故欲将脚本放置云服务器执行。因此,该云服务器应有Web界面,供我上传图片和下载处理后的图片。

简单说,手机上传图片,服务器处理,手机下载结果图片。

 

方案:

 

基于成本考虑,超过RMB 100元的都不考虑。看来看去,就A里和X讯比较靠谱。于是使用新手特权购买X里云服务器一台,配置较低:1核2G1M40G, CentOS7,但是价格非常之便宜,一年还不到100。这里是优惠链接

 

这么低的配置,Java系就不考虑了。刚好图像处理脚本是Python,何不直接用Python搭建HTTP Server。搜索之,果不期然,Python没有让我失望。

 

1. 使用Python3命令开启Web服务

 

只用下面一句命令,即可搭建HTTP Server:

 
  1. # 此为Python3脚本,在cmd中运行此命令。(Python2脚本与此不同请自行百度)

  2. # 9900 是端口号,可随意设置

  3. python -m http.server 9900

然后你就可以在浏览器中输入:http://localhost:9900 ,就能看到一个空白页面,这就说明HTTP Server已经运行了。

如果执行该命令的目录内有文件,你输入 http://localhost:9900,会看到该目录下的所有文件列表,很像一个FTP服务器。

对,没错,只需这一句话,你的当前文件夹就变成了FTP服务器根目录,局域网内都可以随意下载文件。简直是,内网搭建FTP服务器(发布文件)之利器!

 

2. 安装bottle库

 

很可惜,这一行命令只能下载,没有上传界面。于是,我又是一番搜索,得知,成型的Python Web服务器有

Flask:轻量自由;

Django:大而全;

在我看来都复杂了,我不想因运行一个脚本而搭建个完整的Web服务器。最后,看中了只有一个文件的Python Web服务器 Bottle 。一个文件,这才是小而美。

 

使用pip3安装bottle:

pip3 install bottle

既然用到 bottle,就去看了几篇帖子,该作者写的Bottle系列文章都挺好,分享之。

 

3. 使用bottle实现上传下载页面

 

参考该作者文章,我删繁就简,简化成了1个Python文件。但是能实现:上传界面,下载界面,调用服务器python脚本三大核心功能,最终实现手机即能下载到图片处理结果。

【这个下面这个脚本一定一定 不要起名 bottle.py,否则会遮盖bottle库文件,让python误以为这个脚本就是bottle库文件,导致出现import route报错】

 
  1. #Python3脚本,不适用于Python2

  2. #!/usr/bin/envpython

  3. #coding=utf-8

  4. from bottle import route,run,template,request,static_file

  5. import os

  6. import time

  7.  
  8. # 此处需改为你的目录地址

  9. img_path='/home/unixq/testHttpServer/img' #定义上传文件的保存路径

  10.  
  11. # 此处可扩充为完整HTML

  12. uploadPage='''

  13. <form action="upload" method="POST" enctype="multipart/form-data">

  14. <input type="file" name="data" />

  15. <input type="submit" value="上传" />

  16. </form>

  17. '''

  18.  
  19. @route('/upload')

  20. def upload():

  21. return uploadPage

  22.  
  23. @route('/upload',method='POST')

  24. def do_upload():

  25. uploadfile=request.files.get('data') #获取上传的文件

  26. uploadfile.save(img_path,overwrite=True) #overwrite参数是指覆盖同名文件

  27. os.system('python3 imgProcess.py') # 执行服务器本地Python脚本

  28. time.sleep(3) # 等待3秒,待本地脚本执行完毕

  29. return u"转换成功,请点击<a href='/download/output.jpg'>下载文件</a>"

  30.  
  31. @route('/download/<filename:path>')

  32. def download(filename):

  33. return static_file(filename,root=img_path,download=filename)

  34.  
  35.  
  36. run(host='0.0.0.0',port=8899,debug=True)

上云效果如下:(截图由 Snapaste 软件制作)

最后,如果在云服务器上执行时,使用 nohug 指令,可以使本脚本在我们关掉Shell的时候,依然在后台执行.

其中 & 命令是使脚本在后台执行。

$ nohup python3 upload.py &

查看所有在执行的任务【注意:此命令仅在当前终端有效】:

$ jobs

把后台任务调整到前台,使用 fg %任务号;反之,使用 bg %任务号:

 
  1. $ fg %3

  2. $ bg %2

注意:jobs命令仅在当前终端有效。过几日,我们再进入云服务器,jobs是没有结果的。此时需要使用 ps -ef | grep python3来查找还在后台运行的进程。如果需要关掉,使用命令“ kill 进程号”。

 

4. 转为正式Web服务持续运行

以上命令启动的服务,很容易挂掉,不知道为什么。如果要像网站一样7*24不间断提供访问,还是需要来一套正规的服务器软件。

推荐:Nginx + uwsgi + bottle,即可像 Apache + Tomcat 或者 Apache + PHP 一样长期提供Web服务。

 

参考资料:https://www.aliyun.com/minisite/goods?userCode=f3xmzovo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web服务搭建 的相关文章

  • window下apache安装和配置

    下载 32位 http httpd apache org 64位 http www apachelounge com download 安装 解压Apache2 4到F Apache2 4 修改文件F Apache2 4 conf http
  • c++使用curl库发送https请求

    一 环境win7 64位 vs2010 二 文件准备 2 1文件下载 libcurl 下载页面 http curl haxx se download html 我下载的是https curl haxx se download curl 7
  • libevent(7)libevent中的事件event

    一 事件状态 libevent有4种事件状态 分别是 initialized pending active persistent 这4种状态的转换关系如下 1 已初始化 initialized 对应图中的non pending状态 表示事件
  • libev学习系列之四:ev_loop事件循环

    libev学习系列之四 ev loop事件循环 版本说明 版本 作者 日期 备注 0 1 ZY 2019 5 31 初稿 目录 文章目录 libev学习系列之四 ev loop事件循环 版本说明 目录 一 前言 二 描述 三 例子 一 前言
  • 嵌入式编写TCP连接过程

    先来一个三次握手和四次挥手 嵌入式连接过程 1 af 为地址族 Address Family 也就是 IP 地址类型 常用的有 AF INET 和 AF INET6 AF 是 Address Family 的简写 INET是 Inetnet
  • select 模型解释

    套接字模式 阻塞套接字和非阻塞套接字 或者叫同步套接字和异步套接字 套接字模型 描述如何对套接字的I O行为进行管理 Winsock提供的I O模型一共有五种 select WSAAsyncSelect WSAEventSelect Ove
  • TCP和UDP的最完整的区别

    欢迎访问个人网站 这里排版舒服点 TCP和UDP的最完整的区别 码到城攻TCP和UDP的最完整的区别https www codecomeon com posts 7 TCP UDP TCP与UDP基本区别 1 基于连接与无连接 2 TCP要
  • ESP32的WIFI的STA模式&调控ESP32蓝牙和WIFI发射功率

    以下相关API接口的定义可进入l乐鑫官方查看 Wi Fi 库 ESP32 ESP IDF 编程指南 v4 4 文档 STA模式配置过程 include
  • Python基于Scapy的抓包协议分析器

    环境 py3 8 原理 模仿wireshark 利用python的scapy模块下的sniff 函数进行数据的抓取 并进行所谓的 消费者处理 即跟据OSI网络协议模型进行协议分析 将整个程序精简的概括得到最关键的一句代码 sniff prn
  • Unity使用C#实现简单Scoket连接及服务端与客户端通讯

    简介 网络编程是个很有意思的事情 偶然翻出来很久之前刚开始看Socket的时候写的一个实例 贴出来吧 Unity中实现简单的Socket连接 c 中提供了丰富的API 直接上代码 服务端代码 Thread connectThread 当前服
  • 自旋锁(spinlock) 解释得经典,透彻

    自旋锁与互斥锁有点类似 只是自旋锁不会引起调用者睡眠 如果自旋锁已经被别的执行单元保持 调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁 自旋 一词就是因此而得名 由于自旋锁使用者一般保持锁时间非常短 因此选择自旋而不是睡眠是非常必
  • UNIX网络编程之源代码的编译和使用

    UNIX网络编程入门 对于想学习网络编程的来说 UNIX网络编程 这书肯定是不二选择 所谓实践是检验真理的唯一标志 特别是对于编程来讲 再多的理论经验也比不过code一次 UNIX网络编程 这本书提供连源码下载 第三本版的源码可点击这里下载
  • Linux I/O多路复用——poll模型实现服务端Socket通信

    目录 poll函数 参数说明 events相关 与select的不同 程序流程 程序实例 poll函数 poll模型在实现服务端时思路是和select类似的 可以说poll是select的加强版 poll函数原型如下 int poll st
  • 进程间通信之共享内存分析

    零拷贝技术 https strikefreedom top linux io and zero copy 一 内存映射和共享内存的区别 1 1 内存映射之mmap函数 将一个文件或者其它对象映射到进程的地址空间 实现文件磁盘地址和进程虚拟地
  • HTTP与HTTPS的区别,HTTPS的工作原理及优缺点

    为什么要有HTTPS 超文本传输协议HTTP协议被用于在web服务器和网站服务器之间传递消息 HTTP协议以明文方式发送内容 不提供任何方式的数据加密 如果攻击者截取了web浏览器和网站服务器之间的传输报文 就可以直接读懂其中的信息 因此
  • linux socket非阻塞之connect 函数

    1 connect原型 include
  • C++知识分享: Socket 编程详解,万字长文

    介绍 Socket编程让你沮丧吗 从man pages中很难得到有用的信息吗 你想跟上时代去编Internet相关的程序 但是为你在调用 connect 前的bind 的结构而不知所措 等等 好在我已经将这些事完成了 我将和所有人共享我的知
  • Windows7旗舰版和10 创建原始套接字失败,代码10013

    笔记本重装系统后 以前能运行的程序中的Ping程序不能运行了 查看代码 创建套接字失败 RawSock socket AF INET SOCK RAW IPPROTO ICMP RawSock INVALID SOCKET 用DWORD d
  • HTTPS 的加密流程

    目录 一 HTTPS是什么 二 为什么要加密 三 加密 是什么 四 HTTPS 的工作过程 1 对称加密 2 非对称加密 3 中间人攻击 4 证书 总结 一 HTTPS是什么 HTTPS Hyper Text Transfer Protoc
  • DNS使用TCP与UDP

    DNS同时占用UDP和TCP端口53是公认的 这种单个应用协议同时使用两种传输协议的情况在TCP IP栈也算是个另类 但很少有人知道DNS分别在什么情况下使用这两种协议 先简单介绍下TCP与UDP TCP是一种面向连接的协议 提供可靠的数据

随机推荐

  • HTTPweb服务器——HTTP整体设计框架

    我们整个的项目采用B S模式 通过浏览器发送HTTP的get方法和post方法 然后server进行响应 这样最终通过html看到我们所显示的最终的效果 另外 为了支持并发 我们采用了多线程的结构 1 进行创建监听套接字 和其他socket
  • Android button靠右侧显示

    注 要在包含button的父布局中设置
  • SpringCache 使用Redis作为缓存技术的使用

    介绍 Spring Cache是一个框架 实现了基于注解的缓存功能 只需要简单地加一个注解 就能实现缓存功能 大大简化我们在业务中操作缓存的代码 Spring Cache只是提供了一层抽象 底层可以切换不同的cache实现 具体就是通过Ca
  • Unity地图设计和关卡顺序解锁以及分支解锁最好理解的实现(PlayerPrefs.GetInt与PlayerPrefs.SetInt应用及内容查询)

    Unity地图设计和关卡解锁最好理解的实现 PlayerPrefs GetInt与PlayerPrefs SetInt应用及内容查询 这里说一种类似于森林冰火人的解锁机制 也就是中心的关卡先解锁 中间的通过了四周解锁一个 然后一个接一个解锁
  • 微信小程序密码显示隐藏(小眼睛)

    一 效果图 微信小程序密码显示隐藏 小眼睛 二 代码 wxml
  • 如何使用vs将现有的项目或者文件夹(尤其是多层目录的)添加到项目中

    困扰我这么久的问题 哎 真心弱爆了 1 将现有项目或文件夹拷贝到指定目录下 2 解决方案右上有个显示所有文件的按钮 然后选中所有要添加的文件 右击 选择包含到项目中即可
  • react 函数组件props的使用

    函数组建的props 1 如何给组件传递数据 给组建的标签添加属性即可 2 函数组件通过props参数就能接受 也可以通过解构props function App props return div h1 我是App组件 props name
  • 层次分析法基本介绍

    层次分析法 1 主要解决哪类问题 评价类 评价类问题要明确 评价的目标是什么 为达到这个目标的可选方案 评价的准则或标准是什么 2 原理 思路是啥 eg 小明高考完如何选择一个学校 如何选择一个旅游目的地 可以思考到 并得到表格 定义指标
  • PDF批量替换文字器免费版

    安装教程 1 下载解压后 得到文件 pdfreplacer exe 双击进入安装向导 2 选择语言 完成后确认进入下一步 3 下一步 4 系统默认安装在C盘 单击浏览可自定义选择安装路径 随后下一步 5 是否创建桌面快捷方式 建议选上 下一
  • PCB板基础知识

    制作机器人的时候不可避免的会用到PCB板 之前对它的认识只停留在会用这个层面 最近学习了PCB板的制作 发现了之前很多不知道的知识 于是整理出来和大家分享 1 过孔 双层板的连接通道 这个是之前最摸不着头脑的环节 拿到一个PCB就会发现上面
  • 拼接滚动地图-Quick-cocos2dx

    lua里面class的使用 一个class的使用 class方法用于创建类 其实就是lua表 传入类名和父类 父类为方法或表 class使用 第一次用A class fun 第二次用a A new 示例 local LevelView cl
  • SpringBoot之@Slf4j的使用详解

    先简单的来说 作用 Slf4j是在SpringBoot基础上Lombok为我们提供的日志输出注解 使用 先引入lombok依赖 将注解添加在类上 然后就可以使用log info 进行日志的输出打印 Slf4j注解填在当前类上相当于Sprin
  • vscode使用ssh远程linux可视化开发环境搭建

    目录 1 搭建 vscode 远程开发流程 2 在线搭建环境 3 离线搭建环境 4 ssh免密登录 设置白名单 5 参考文档 最近一直在做服务引擎开发 编译都是在服务器linux环境中进行 每次调试使用gdb修改使用vim贼麻烦 最后找了下
  • 10种Arduino IDE替代品开始编程

    当我们开始开发Arduino项目时 通常我们倾向于使用Arduino IDE 无论如何 如果我们对标准IDE不满意 我们应该考虑几种Arduino IDE替代方案 众所周知 在开发物联网项目或构建DIY项目时 Arduino是最受欢迎的原型
  • ARM指令集

    ARM指令的基本格式 ARM指令的基本格式为
  • echarts之柱状图(1)

    PS相关学习资料链接 Pink老师的教程分解 O O哈哈 div class bar h2 就业行业 a href 2019 a a href 2020 a h2 div class chart div div css自行设置 类名为cha
  • Failed to execute goal on project rocketmq-console-ng: Could not resolve dependencies for project

    Apache RocketMQ安装部署 Failed to execute goal on project rocketmq console ng Could not resolve dependencies for project org
  • TypeScript(五)类型别名及类型符号

    目录 引言 类型别名 基本用法 字面量类型 数字字面量 字符串字面量 布尔字面量 空字面量 枚举字面量 类型符号 联合类型 交叉类型 类型断言 尖括号 as关键字 非空断言 类型保护 typeof instanceof 类型谓词 索引类型
  • 解决 IProgress not found. Please update jupyter and ipywidgets. 问题

    解决 IProgress not found Please update jupyter and ipywidgets 问题 一 报错 IProgress not found Please update jupyter and ipywid
  • web服务搭建

    Python 吹爆Python 1行代码搭建Web服务器30行代码实现服务器的文件上传下载 需求 手机每日下载图片 然后需经过本人编写的Python脚本处理一遍 再返回到手机上 个人电脑不能保证时刻开机在线 自己也不可能一直在电脑旁边 故欲