Pregunta

Estoy usando torres de alta tensión, y mi acción del controlador es:

 class UserController(BaseController):

      def create(self):
           name = request.POST['name']
           email = request.POST['email']
           password = request.POST['password']
           ...

Pero me encontré en TurboGears, puedo hacer como esto:

 class UserController:

      def create(self, name, email, password):
           ...

¿Cómo hacer lo mismo en torres de alta tensión?


Actualizar

he buscado en google, y preguntó en algunos otros foros, pero aún no recibe la respuesta. Nadie sabe (o interesado) tal pregunta?

¿Fue útil?

Solución

Parece que usted quiere dar argumentos al método create() de su controlador que se derivan directamente de los elementos de los datos POST. Usted puede hacer esto, pero es más bien incómoda.

El camino más corto para hacerlo - de una manera frágil -. Sería definir simplemente la acción como tal, el uso de estas variables de entorno por defecto para la acción

class UserController(Base):
  def create(self, name=request.POST['name'], email=request.POST['email'], ...):
        ...

Lo que pasa es que a pesar de que pueda parecer engorroso, el primer método que mostró probablemente es una mejor manera de hacerlo, porque le da más espacio para recuperarse sin problemas de esas variables no ser lo que se espera que sean.

Si usted se siente como poniendo muy incómoda, que puede empujar esta lógica en routing.py. Los datos POST es que ya se encuentra allí, pero no tan directamente, porque la lógica como ésta pertenece en su controlador. Se podría utilizar un condicional método Rutas , que le da acceso a environ[wsgi.input] , que tiene los datos POST, a continuación, extraer los datos deseados desde allí y empuje en el diccionario match_dict, que a su vez permitiría que usted alimenta a la POSTDATA directamente a los argumentos de su acción del controlador. Aquí está la sección de los pilones libro sobre las funciones condicionales de enrutamiento .py, y he aquí una pregunta similar aquí en SO y otra , que debería ayudar si realmente desea trabajar con wsgi.input directamente.

Sin embargo, en lugar de cualquiera de esas cosas, me gustaría utilizar el método original:

class UserController(BaseController):
    def create(self):
       name = request.POST['name']
       email = request.POST['email']
       password = request.POST['password']
       ...

Es definitivamente posible analizar los datos POST antes de que llegue a su controlador y tomar acciones sobre el mismo antes de esa fecha. Sin embargo, mirando a los datos POST y decidir qué hacer con él es el papel de un controlador, no papel Rutas o un papel de middleware. Si decide - por ejemplo - se inicia jugando con los datos POST en routing.py, que está perdiendo algunas de las ventajas de acoplamiento débil de los pilones y en un grado menor todo el asunto WSGI.

ver los controladores de pilones que se parecen a esto, sin embargo:

class UserController(BaseController):
    def create(self, name, spam):
       ...

Sin embargo, en esos casos, los valores de "nombre" y "spam" provienen de la cadena de consulta (y desde el mapa de Rutas), no de los datos POST.

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