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 , ...)