GOOGLE ADS

domingo, 1 de mayo de 2022

Enrutamiento basado en ruta en Python

Estoy tratando de escribir el código python, que devuelve la salida json cuando curl localhost:8000. Quiero obtener el valor solo cuando lo hago curl localhost:8000/shakespear. A partir del código actual, obtengo el valor en 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()


Solución del problema

Use una condición if para verificar si parsed.pathes lo mismo que su punto final deseado, es decirshakespear

def do_GET(self):
...
if self.path == '/shakespear':
self.send_response(200)
#do stuff
...

Tenga en cuenta que /es parte de la pathcadena. Con self.pathusar urlparsees innecesario

Está destinado a ser utilizado cuando está trabajando con una URL que necesita analizar.

Ejemplo:

Como se explica en los documentos, urlparse
devuelve un ParseResultcon el pathatributo.

Pasar la url a urlparse:

from urllib.parse import urlparse
url = "http://127.0.0.1:8080/shakespear"
parsed = urlparse(url)

Esto devuelve un ParseResultcuyopath atributo puede acceder:

print(parsed)
ParseResult(scheme='http', netloc='127.0.0.1:8080', path='/shakespear',
params='', query='', fragment='')
print(parsed.path)
'/shakespear'

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...