Джанго аякс прокси вид - PullRequest
       6

Джанго аякс прокси вид

8 голосов
/ 07 февраля 2010

Веб-приложение django должно совершать ajax-вызовы на внешний URL-адрес. В разработке я работаю напрямую из django, поэтому у меня проблема междоменная. Как django может написать прокси для вызова ajax?

Ответы [ 3 ]

6 голосов
/ 05 марта 2012

Вот мертвая простая реализация прокси для 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)

Это прокси-запросы от PROXY_PATH + путь к TARGET_URL + путь. Прокси-сервер включается и настраивается путем добавления шаблона URL, подобного этому, в urls.py:

.
url(r'^PROXY_PATH/(?P<path>.*)$', proxy_to, {'target_url': 'TARGET_URL'}),

Например:

url(r'^images/(?P<path>.*)$', proxy_to, {'target_url': 'http://imageserver.com/'}),

сделает запрос на http://localhost:8000/images/logo.png извлечь и вернуть файл на http://imageserver.com/logo.png.

Строки запроса пересылаются, в то время как заголовки HTTP, такие как файлы cookie и данные POST, не передаются (это легко добавить, если вам это нужно).

Примечание: в основном предназначено для разработки. Правильный способ обработки прокси в рабочей среде - это HTTP-сервер (например, Apache или Nginx).

2 голосов
/ 24 ноября 2010

Я столкнулся с этим вопросом, пытаясь ответить на него сам, и нашел это приложение Django:

http://httpproxy.yvandermeer.net/

... что немного тяжелее для того, что мне нужно (для записи и воспроизведения требуется syncdb для добавления в модель). Но вы можете увидеть код, который он использует, в его общем виде прокси, который основан на httplib2:

http://bitbucket.org/yvandermeer/django-http-proxy/src/1776d5732113/httpproxy/views.py

1 голос
/ 07 февраля 2010

Прав ли я, что вы спрашиваете о том, как написать представление в Django, которое могло бы принимать входящий AJAX-запрос, выдавать запрос на удаленный сервер и затем возвращать полученный ответ браузеру?

Если это так, то это не совсем вопрос, специфичный для Django - удаленные вызовы могут быть сделаны с помощью urllib2 или httplib Python, а затем вам нужно просто поставить:

 return HttpResponse(received_response)

- в вашем прокси-представлении Django. Я не предполагаю обработки ответа, потому что если это просто прокси для вызова AJAX, тогда JavaScript ожидает необработанные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...