Python 中基于路径的路由
Path based routing in Python
我正在尝试编写 python 代码,当我 curl localhost:8000
时 return 输出 json。我只想在 curl localhost:8000/shakespear
时获取值。从当前代码开始,我得到的值是 curl localhost:8000
main.py
#!/usr/bin/env python
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse
import json
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
parsed_path = urlparse(self.path)
self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps({
'myfavourite author name': 'shakespear',
}).encode())
return
if __name__ == '__main__':
server = HTTPServer(('0.0.0.0', 8000), RequestHandler)
print('Starting server at http://localhost:8000')
server.serve_forever()
您正在忽略路径并向每个请求发送通用响应。
正如您在 RequestHandler class 中看到的那样,变量 parsed_path
被忽略,路径是什么并不重要,响应是一个常量静态的东西。
您应该更改代码并处理 parsed_path
并对每个请求做出适当的响应并将其放入 self.wfile.write
使用 if 条件检查 parsed.path
是否与您想要的端点相同,即 shakespear
def do_GET(self):
...
if self.path == '/shakespear':
self.send_response(200)
#do stuff
...
请记住 /
是 path
字符串的一部分。 self.path
使用 urlparse
是不必要的
当您处理需要解析的 url 时使用它。
示例:
如文档中所述,urlparse
returns 具有 path
属性的 ParseResult
。
将 url 传递给 urlparse
:
from urllib.parse import urlparse
url = "http://127.0.0.1:8080/shakespear"
parsed = urlparse(url)
此 returns 一个 ParseResult
您可以访问其 path
属性:
print(parsed)
ParseResult(scheme='http', netloc='127.0.0.1:8080', path='/shakespear',
params='', query='', fragment='')
print(parsed.path)
'/shakespear'
我正在尝试编写 python 代码,当我 curl localhost:8000
时 return 输出 json。我只想在 curl localhost:8000/shakespear
时获取值。从当前代码开始,我得到的值是 curl localhost:8000
main.py
#!/usr/bin/env python
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse
import json
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
parsed_path = urlparse(self.path)
self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps({
'myfavourite author name': 'shakespear',
}).encode())
return
if __name__ == '__main__':
server = HTTPServer(('0.0.0.0', 8000), RequestHandler)
print('Starting server at http://localhost:8000')
server.serve_forever()
您正在忽略路径并向每个请求发送通用响应。
正如您在 RequestHandler class 中看到的那样,变量 parsed_path
被忽略,路径是什么并不重要,响应是一个常量静态的东西。
您应该更改代码并处理 parsed_path
并对每个请求做出适当的响应并将其放入 self.wfile.write
使用 if 条件检查 parsed.path
是否与您想要的端点相同,即 shakespear
def do_GET(self):
...
if self.path == '/shakespear':
self.send_response(200)
#do stuff
...
请记住 /
是 path
字符串的一部分。 self.path
使用 urlparse
是不必要的
当您处理需要解析的 url 时使用它。
示例:
如文档中所述,urlparse
returns 具有 path
属性的 ParseResult
。
将 url 传递给 urlparse
:
from urllib.parse import urlparse
url = "http://127.0.0.1:8080/shakespear"
parsed = urlparse(url)
此 returns 一个 ParseResult
您可以访问其 path
属性:
print(parsed)
ParseResult(scheme='http', netloc='127.0.0.1:8080', path='/shakespear',
params='', query='', fragment='')
print(parsed.path)
'/shakespear'