Pregunta

Me he dado cuenta de tres maneras principales de Python frameworks web de tratar la solicitud de entrega:decoradores, controlador de clases con los métodos de las solicitudes individuales, y solicitar clases con métodos para GET/POST.

Tengo curiosidad acerca de las virtudes de estos tres enfoques.Hay grandes ventajas o desventajas de cualquiera de estos enfoques?Para fijar ideas, aquí hay tres ejemplos.

Botella utiliza decoradores:

@route('/')
def index():
    return 'Hello World!'

Torres de alta tensión utiliza el controlador de clases:

class HelloController(BaseController):
    def index(self):
        return 'Hello World'

Tornado utiliza el controlador de solicitud clases con métodos para los tipos:

 class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

De qué estilo es la mejor práctica?

¿Fue útil?

Solución

De hecho, hay una razón para cada uno de los tres métodos mencionados, específicos para cada proyecto.

  • Botella intenta mantener las cosas como simple/sencillo como sea posible para el programador.Con decoradores para las rutas que usted no tiene que preocuparse sobre el desarrollador de la comprensión de la programación orientada a objetos.
  • Pilones de desarrollo meta es hacer código re-utilizable y fácilmente integrado con WSGI estilo HTTP el proceso de enrutamiento.Como tales, tienen elegido un muy OOP manera de organizar las rutas.Como un ejemplo, usted podría copiar y pegar en cualquier HelloController Torres de alta tensión de la aplicación y sólo debe por arte de magia el trabajo.Incluso si la aplicación es ser servidos a través de WSGI en algunos complicado de la moda.
  • Tornado tiene otro motivo para que los haciendo las cosas de la manera que lo hace:Tornado epoll basado en IOLoop (en conjunción con el tornado.web.De la aplicación) crea una instancia de cada RequestHandler como las solicitudes proceden de.Manteniendo cada RequestHandler limitado a un específico GET o POST esto permite IOLoop a rápidamente instanciar la clase, proceso de la solicitud, y, finalmente, vamos a consigue el recolector de basura.Esto mantiene es rápido y eficiente, con un pequeño la huella en la memoria, independientemente de cómo muchos RequestHandlers su aplicación ha.Este es también el motivo por el Tornado puede manejar muchas más solicitudes simultáneas de Python basado en servidores web (cada solicitud tiene su propia instancia).

Ahora, habiendo dicho todo lo que usted debe saber que siempre se puede reemplazar el valor predeterminado marco de comportamiento.Por ejemplo, escribí un MethodDispatcher para Tornado que hace que funcione más como Torres de alta tensión (bueno, yo tenía CherryPy en mente cuando lo escribí).Se ralentiza Tornado una pequeña cantidad (y aumenta el consumo de memoria ligeramente) debido a que tiene una gran RequestHandler (como opuesto a un montón de pequeños), pero puede reducir la cantidad de código en su aplicación y hacer un poco más fácil de leer (En mi opinión sesgada, por supuesto =).

Otros consejos

Los diferentes marcos tratando de lograr el mejor rendimiento a través de la mejor de código (para la escritura y lectura).Cada uno de ellos adoptar diferentes estrategias basadas en o alrededor de MVC o MVT.

Lo que usted está centrado en probablemente vendrá abajo a gusto personal.Y mi respuesta.Estoy tratando muy duro para evitar cualquier tipo de guerra santa, porque no pueden ser válidos los argumentos técnicos que yo no sé acerca de.

Pero Yo personalmente prefieren mantener el enrutamiento separados de la controladora (django la vista) y plantillas separado de eso.Esto hace que la reutilización de los controladores realmente simple.Sí, soy una Django usuario.

Como tal, en realidad no soy un gran fan de la Botella del decoradores o envolver las cosas en gran gigantesco clases.Yo solía hacer cuando yo era un ASP.NET dev pero Django set me free.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top