keep google engine auth app django google-app-engine request httprequest

google - ¿Cómo creo un objeto de solicitud en Django?



login google python (2)

Así que estoy usando Django con Google App Engine y tengo un archivo urls.py que redirige cada url a un método correspondiente. Cada uno de esos métodos pasa automáticamente "solicitud" como uno de los argumentos, que creo que es un objeto HttpRequest.

¿Cómo creo este objeto de solicitud lleno desde mi código? Por ejemplo, si estoy dentro de algún método en mi código, me gustaría tener acceso a este objeto de solicitud sin tener que pasarlo a cada función para asegurarme de que esté disponible. Suponiendo que urls.py llama al método foo, la forma en que lo estoy haciendo actualmente es:

foo(request): # stuff here bar(request) # more stuff here bar(request): # stuff here<stuff> baz(request) # more stuff here baz(request): do something with request here

Esto parece incorrecto porque tengo que pasar la solicitud a través de funciones que no lo necesitan solo para que esté disponible en baz.

Me gustaría hacer algo como:

foo(request): # stuff here bar() # more stuff here bar(): # stuff here baz() # more stuff here baz(): request = HttpRequest() do something with request here

es decir, no apruebo la solicitud si no es necesario. Sin embargo, al hacer request = HttpRequest () se devuelve un objeto de solicitud vacío ... lo que quiero es una versión completamente poblada, como lo que se pasa a cada método llamado desde urls.py.

Eché un vistazo a la documentación de HttpRequest aquí: http://docs.djangoproject.com/en/dev/ref/request-response/ pero no vi la manera de hacerlo.

Cualquier pensamiento sería muy apreciado.

Gracias, Ryan


Simplemente cree una variable de solicitud antes de las definiciones de vista y establezca su valor cuando la reciba de la vista (usando su código de ejemplo):

current_request = None foo(request): current_request = request # stuff here bar() # more stuff here bar(): # stuff here baz() # more stuff here baz(): # do something with currest_request here

Ver: Notas sobre el alcance de la variable de Python

Actualización: esta pregunta es muy similar a la suya y la solución aceptada es básicamente crear una variable de solicitud global y adjuntarla a la configuración.


request = HttpRequest() le dará una vacía, pero puede escribirle algo.

Aquí hay un ejemplo que utilicé en mi proyecto:

def new(request): ... newrequest = HttpRequest() newrequest.method = ''GET'' newrequest.user = request.user resp = result_email(newrequest , obj-id , token ) send_email( resp , ... ) return HttpResponseRedirect( ... ) ... def result_email(request , ...): ... return render(request , ...)