Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/funnygeeker/micropython-easyweb
A simple and versatile web server library for Micropython. 适用于 `Micropython` 的简易 Web Server 库
https://github.com/funnygeeker/micropython-easyweb
esp32 esp8266 flask http-server micropython python socket stm32 web
Last synced: about 1 month ago
JSON representation
A simple and versatile web server library for Micropython. 适用于 `Micropython` 的简易 Web Server 库
- Host: GitHub
- URL: https://github.com/funnygeeker/micropython-easyweb
- Owner: funnygeeker
- Created: 2023-11-17T08:02:33.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-03-23T14:32:21.000Z (9 months ago)
- Last Synced: 2024-03-23T15:25:52.293Z (9 months ago)
- Topics: esp32, esp8266, flask, http-server, micropython, python, socket, stm32, web
- Language: Python
- Homepage:
- Size: 68.4 KB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ZH-CN.md
Awesome Lists containing this project
README
[English (英语)](./README.md)
# micropython-easyweb
![EasyWeb](./web/EasyWeb_256px.png)
- 适用于 `Micropython` 的:简易 Web Server 库,易用,多功能### 特点
- 尽可能模仿了 `Flask` 框架的风格
- 集成了常用的:GET 请求参数解析,表单解析,HTML渲染,文件发送,Cookies设置,Cookies获取,动态路由 等常用功能### 使用说明
- 本项目一共有三个版本的文件,请根据实际需要进行选择:
- `thread`: `/lib/easyweb_thread.py` 使用多线程实现
- `asyncio`: `/lib/easyweb.py` 使用异步实现,具有较好的兼容性和可靠性
- `single`: `/lib/easyweb_single.py` 使用单线程循环实现,具有较好的兼容性### 兼容性
#### 已通过测试设备
- `ESP-01S`: `single`
- `ESP32`: `single`, `thread`, `asyncio`
- `ESP32-C3`: `single`, `thread`, `asyncio`
- `ESP32-S3`: `single`, `thread`, `asyncio`### 示例代码
- 这里我们使用 [micropython-easynetwork](https://github.com/funnygeeker/micropython-easynetwork) 作为示例,连接局域网(也可以工作在AP模式,使用其他设备连接开发板)
```python
import time
from lib.easynetwork import Client
from lib.easyweb import EasyWeb, render_template, send_file, make_responseclient = Client()
client.connect("ssid", "password") # 或者 client.connect("ssid", "")while not client.isconnected():
pass
print('IP Address: {}'.format(client.ifconfig()[0]))ew = EasyWeb() # 初始化 EasyWeb
# 添加路由
@ew.route('/')
def home(request):
print("=======[request]=======")
print('URL: ', request.url)
print('Args: ', request.args)
print('Form: ', request.form)
print('Host: ', request.host)
print('Json: ', request.json)
print('Path: ', request.path)
print('Header: ', request.headers)
print('Cookies: ', request.cookies)
print('Full_Path: ', request.full_path)
return render_template("/web/wifi.html")# 发送文件
@ew.route('/easyweb.png')
def img(request):
# 访问网页的 /easyweb.png 试试?
return send_file("/web/EasyWeb_256px.png")# 下载文件
@ew.route('/download')
def download(request):
# 访问网页的 /easyweb.png 试试?
# as_attachment: 是否作为附件发送文件,作为附件时会被下载
# attachment_filename: 下载文件时向用户显示的文件名。如果未提供,将使用原始文件名
return send_file("/web/EasyWeb_256px.png", as_attachment=True, attachment_filename='easyweb.png')# 停止 EasyWeb
@ew.route('/stop')
def stop(request):
ew.stop()# 获取字符串
@ew.route('/user/')
def user(request):
# 访问网页的 /user/123456 试试?
return "Hello {}
".format(request.match)# 获取路径
@ew.route('/path/')
def path(request):
# 访问网页的 /path/123/456 试试?
return "Path {}
".format(request.match)# 渲染 HTML
@ew.route('/time')
def the_time(request):
# 访问网页的 /time 然后刷新几遍页面,观察网页的变化
return render_template("/web/time.html", time=time.time())# 获取与设置 Cookies
@ew.route('/cookie')
def cookie(request):
# 访问网页的 /cookie 然后刷新几遍页面,观察网页的变化
response = make_response('Cookies: {}
'.format(str(request.cookies)))
response.set_cookie('cookie_name', 'cookie_value')
return response# 自定义状态码
@ew.route('/404')
def status_code(request):
# 访问网页的 /404,打开开发人员工具观察状态码
return '404 Not Found
', 404# 获取与设置 Cookies,同时自定义状态码
@ew.route('/cookie2')
def cookie2(request):
# 访问网页的 /cookie 然后刷新几遍页面,观察网页的变化
response = make_response() # 也可以在后面为 response.data 赋值,来代替初始化时赋值
response.data = 'Cookies: {}
404 Not Found
'.format(str(request.cookies))
response.set_cookie('cookie_name', 'cookie_value')
return response, 404# 获取 JSON 格式的内容
@ew.route('/json')
def cookie2(request):
# 访问网页的 /json
return {'type': 'json', 'num': 123}ew.run()
print('======END======') # 访问 /stop
```