fix url
This commit is contained in:
@@ -172,7 +172,7 @@ def start():
|
|||||||
)
|
)
|
||||||
|
|
||||||
# /weather: 返回天气数据
|
# /weather: 返回天气数据
|
||||||
@naw.route("/weather/*")
|
@naw.route("/weather*")
|
||||||
async def weather_status(request):
|
async def weather_status(request):
|
||||||
await request.write("HTTP/1.1 200 OK\r\n")
|
await request.write("HTTP/1.1 200 OK\r\n")
|
||||||
await request.write("Content-Type: application/json\r\n\r\n")
|
await request.write("Content-Type: application/json\r\n\r\n")
|
||||||
@@ -197,12 +197,15 @@ def start():
|
|||||||
await request.write(json.dumps(config.config_data))
|
await request.write(json.dumps(config.config_data))
|
||||||
|
|
||||||
# /config/set: 更新配置
|
# /config/set: 更新配置
|
||||||
|
# curl -H "Content-Type: application/json" -X POST -d '{"city":"xxx","who":"ami"}' 'http://<url>/config/set'
|
||||||
@naw.route("/config/set")
|
@naw.route("/config/set")
|
||||||
async def config_update(request):
|
async def config_update(request):
|
||||||
ack = {"status": "success"}
|
ack = {"status": "success"}
|
||||||
try:
|
try:
|
||||||
post_data = json.loads(await request.read())
|
content_length = int(request.headers['Content-Length'])
|
||||||
for k, v in post_data.items():
|
post_data = (await request.read(content_length)).decode()
|
||||||
|
|
||||||
|
for k, v in json.loads(post_data).items():
|
||||||
config.set(k, v)
|
config.set(k, v)
|
||||||
config.write()
|
config.write()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import uasyncio as asyncio
|
import uasyncio as asyncio
|
||||||
import uerrno
|
import uerrno
|
||||||
|
|
||||||
|
__version__ = "1.0.0"
|
||||||
__version__ = '1.0.0'
|
|
||||||
|
|
||||||
|
|
||||||
class HttpError(Exception):
|
class HttpError(Exception):
|
||||||
@@ -29,9 +28,7 @@ class Request:
|
|||||||
|
|
||||||
|
|
||||||
async def write(request, data):
|
async def write(request, data):
|
||||||
await request.write(
|
await request.write(data.encode("ISO-8859-1") if type(data) == str else data)
|
||||||
data.encode('ISO-8859-1') if type(data) == str else data
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def error(request, code, reason):
|
async def error(request, code, reason):
|
||||||
@@ -41,7 +38,7 @@ async def error(request, code, reason):
|
|||||||
|
|
||||||
async def send_file(request, filename, segment=64, binary=True):
|
async def send_file(request, filename, segment=64, binary=True):
|
||||||
try:
|
try:
|
||||||
with open(filename, 'rb' if binary else 'r') as f:
|
with open(filename, "rb" if binary else "r") as f:
|
||||||
while True:
|
while True:
|
||||||
data = f.read(segment)
|
data = f.read(segment)
|
||||||
if not data:
|
if not data:
|
||||||
@@ -54,28 +51,29 @@ async def send_file(request, filename, segment=64, binary=True):
|
|||||||
|
|
||||||
|
|
||||||
class Nanoweb:
|
class Nanoweb:
|
||||||
|
extract_headers = ("Authorization", "Content-Length", "Content-Type")
|
||||||
extract_headers = ('Authorization', 'Content-Length', 'Content-Type')
|
|
||||||
headers = {}
|
headers = {}
|
||||||
|
|
||||||
routes = {}
|
routes = {}
|
||||||
assets_extensions = ('.html', '.css', '.js', '.jpg', '.png', '.gif')
|
assets_extensions = (".html", ".css", ".js", ".jpg", ".png", ".gif")
|
||||||
|
|
||||||
callback_request = None
|
callback_request = None
|
||||||
callback_error = staticmethod(error)
|
callback_error = staticmethod(error)
|
||||||
|
|
||||||
STATIC_DIR = ''
|
STATIC_DIR = ""
|
||||||
INDEX_FILE = STATIC_DIR + '/index.html'
|
INDEX_FILE = STATIC_DIR + "/index.html"
|
||||||
|
|
||||||
def __init__(self, port=80, address='0.0.0.0'):
|
def __init__(self, port=80, address="0.0.0.0"):
|
||||||
self.port = port
|
self.port = port
|
||||||
self.address = address
|
self.address = address
|
||||||
|
|
||||||
def route(self, route):
|
def route(self, route):
|
||||||
"""Route decorator"""
|
"""Route decorator"""
|
||||||
|
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
self.routes[route] = func
|
self.routes[route] = func
|
||||||
return func
|
return func
|
||||||
|
|
||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
async def generate_output(self, request, handler):
|
async def generate_output(self, request, handler):
|
||||||
@@ -117,7 +115,7 @@ class Nanoweb:
|
|||||||
|
|
||||||
async def handle(self, reader, writer):
|
async def handle(self, reader, writer):
|
||||||
items = await reader.readline()
|
items = await reader.readline()
|
||||||
items = items.decode('ascii').split()
|
items = items.decode("ascii").split()
|
||||||
if len(items) != 3:
|
if len(items) != 3:
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -135,7 +133,7 @@ class Nanoweb:
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
items = await reader.readline()
|
items = await reader.readline()
|
||||||
items = items.decode('ascii').split(":", 1)
|
items = items.decode("ascii").split(":", 1)
|
||||||
|
|
||||||
if len(items) == 2:
|
if len(items) == 2:
|
||||||
header, value = items
|
header, value = items
|
||||||
@@ -149,30 +147,31 @@ class Nanoweb:
|
|||||||
if self.callback_request:
|
if self.callback_request:
|
||||||
self.callback_request(request)
|
self.callback_request(request)
|
||||||
|
|
||||||
if request.url in self.routes:
|
request_url = request.url.rstrip("/")
|
||||||
|
if request_url in self.routes:
|
||||||
# 1. If current url exists in routes
|
# 1. If current url exists in routes
|
||||||
request.route = request.url
|
request.route = request_url
|
||||||
await self.generate_output(request,
|
await self.generate_output(request, self.routes[request_url])
|
||||||
self.routes[request.url])
|
|
||||||
else:
|
else:
|
||||||
# 2. Search url in routes with wildcard
|
# 2. Search url in routes with wildcard
|
||||||
for route, handler in self.routes.items():
|
for route, handler in self.routes.items():
|
||||||
if route == request.url \
|
if route == request_url or (
|
||||||
or (route[-1] == '*' and
|
route[-1] == "*" and request_url.startswith(route[:-1])
|
||||||
request.url.startswith(route[:-1])):
|
):
|
||||||
request.route = route
|
request.route = route
|
||||||
await self.generate_output(request, handler)
|
await self.generate_output(request, handler)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
# 3. Try to load index file
|
# 3. Try to load index file
|
||||||
if request.url in ('', '/'):
|
if request_url in ("", "/"):
|
||||||
await self.generate_output(request, self.INDEX_FILE)
|
await self.generate_output(request, self.INDEX_FILE)
|
||||||
else:
|
else:
|
||||||
# 4. Current url have an assets extension ?
|
# 4. Current url have an assets extension ?
|
||||||
for extension in self.assets_extensions:
|
for extension in self.assets_extensions:
|
||||||
if request.url.endswith(extension):
|
if request_url.endswith(extension):
|
||||||
await self.generate_output(
|
await self.generate_output(
|
||||||
request, '%s%s' % (self.STATIC_DIR,request.url),
|
request,
|
||||||
|
"%s%s" % (self.STATIC_DIR, request_url),
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user