Una aplicación web django necesita realizar llamadas ajax a una url externa. En desarrollo, sirvo directamente desde django, así que tengo un problema de dominio cruzado. ¿Cuál es la forma de django de escribir un proxy para la llamada ajax?django ajax proxy view
Respuesta
¿Estoy en lo cierto al preguntarme cómo escribir una vista en Django que podría aceptar la solicitud entrante AJAX, enviar una solicitud al servidor remoto y luego devolver la respuesta recibida al navegador?
Si es así, entonces no es cuestión realmente específicas de Django - llamadas remotas podrían hacerse con el pitón de urllib2 o httplib, y luego sólo hay que poner:
return HttpResponse(received_response)
- en su proxy-vista de Django . Supongo que no hay procesamiento de respuesta aquí, porque si se trata simplemente de un proxy para llamadas AJAX, JavaScript espera datos sin procesar.
me encontré con esta pregunta al tratar de responder a mí mismo, y encontré esta aplicación Django:
http://httpproxy.yvandermeer.net/
... que es un poco pesado para lo que necesitaba (grabación y reproducción, requiere una syncdb para agregar cosas de modelo). Pero se puede ver el código que utiliza en su opinión proxy genérico, que se basa en :
http://bitbucket.org/yvandermeer/django-http-proxy/src/1776d5732113/httpproxy/views.py
Aquí hay una aplicación de proxy muerto simple de Django.
from django.http import HttpResponse
import mimetypes
import urllib2
def proxy_to(request, path, target_url):
url = '%s%s' % (target_url, path)
if request.META.has_key('QUERY_STRING'):
url += '?' + request.META['QUERY_STRING']
try:
proxied_request = urllib2.urlopen(url)
status_code = proxied_request.code
mimetype = proxied_request.headers.typeheader or mimetypes.guess_type(url)
content = proxied_request.read()
except urllib2.HTTPError as e:
return HttpResponse(e.msg, status=e.code, mimetype='text/plain')
else:
return HttpResponse(content, status=status_code, mimetype=mimetype)
Esta como proxy peticiones de PROXY_PATH + camino a target_url + camino. El proxy está habilitado y configurado mediante la adición de un patrón de URL como esta para urls.py:
url(r'^PROXY_PATH/(?P<path>.*)$', proxy_to, {'target_url': 'TARGET_URL'}),
Por ejemplo:
url(r'^images/(?P<path>.*)$', proxy_to, {'target_url': 'http://imageserver.com/'}),
hará una petición a http: // localhost: 8000/images/logo.png busque y devuelva el archivo al http://imageserver.com/logo.png.
Las cadenas de consulta se envían, mientras que las cabeceras HTTP, como las cookies y los datos POST, no (es bastante fácil de agregar si lo necesita).
Nota: Esto está destinado principalmente para el uso de desarrollo. La forma correcta de manejar proxies en producción es con el servidor HTTP (por ejemplo, Apache o Nginx).
El objetivo es pasar cookies y datos POST, entonces, en lugar de decirnos que es fácil agregar las cookies y los datos POST, ¿podría simplemente haber escrito el código? –
Sí, ¿podría agregar las partes para pasar cookies y datos de POST? –
- 1. MVC Ajax update partial view
- 2. Django view testing
- 3. Django view security and best-practices
- 4. Django Class Based View Composite
- 5. Django + Ajax
- 6. Rails ajax request load view html only
- 7. Modelo proxy Django y ForeignKey
- 8. Django "view no devolvió un objeto HttpResponse".
- 9. JQuery + AJAX + Django = CSRF?
- 10. polimorfismo modelo django con herencia proxy
- 11. Recursos para aprender Django + AJAX
- 12. Ajax llamada fracasar en Django
- 13. Django jquery ajax error 403
- 14. Python-Django ¿Cómo usar django-ajax-uploader en admin?
- 15. django-ajax-selecciona el uso de ejemplo
- 16. Problema de Ajax CSRF en Django 1.3
- 17. Django ajax error response best practice
- 18. Variables de contexto Django y respuesta ajax
- 19. ¿Cómo recibir la solicitud ajax usando django?
- 20. arquitectura Ajax en la aplicación Django
- 21. Django, Ajax sondeo largo, PostgreSQL: transacción inactivo
- 22. Asp.net MVC View Testing?
- 23. backbone view - no está definido
- 24. ASP.Net MVC View Structure
- 25. Lighttpd Reverse Proxy Settings
- 26. JQUERY ajax que pasa el valor de MVC View al Controller
- 27. Javassist: ¿cómo crear proxy de proxy?
- 28. Cappuccino, Django, AJAX, y encajando todo: ¡revise mi arquitectura!
- 29. ¿Cómo usar django-debug-toolbar en llamadas AJAX?
- 30. una mejor manera de hacer ajax en django
No he probado esto, pero creo que este código solo copiará el cuerpo de la respuesta, no los encabezados HTTP de la respuesta, que pueden contener mucha información útil del servidor. –
@Don: ¡Tienes toda la razón! –