Ứng dụng web django cần thực hiện cuộc gọi ajax đến một url bên ngoài. Trong phát triển tôi phục vụ trực tiếp từ django vì vậy tôi có một vấn đề miền chéo. Cách django để viết một proxy cho cuộc gọi ajax là gì?chế độ xem proxy django ajax
Trả lời
Tôi có đúng là bạn đang hỏi về cách viết chế độ xem ở Django có thể chấp nhận yêu cầu AJAX đến, đưa ra yêu cầu tới máy chủ từ xa và sau đó trả lại phản hồi nhận được cho trình duyệt không?
Nếu vậy, thì nó không phải là thực sự Django cụ thể câu hỏi - cuộc gọi từ xa có thể được thực hiện với Python của urllib2 hoặc httplib, và sau đó bạn chỉ cần đặt:
return HttpResponse(received_response)
- trong Django proxy-view của bạn . Tôi giả sử không có xử lý phản hồi ở đây, bởi vì nếu nó chỉ là một proxy cho cuộc gọi AJAX thì JavaScript mong đợi dữ liệu chưa được xử lý.
Tôi chạy qua câu hỏi này trong khi cố gắng để trả lời nó bản thân mình, và tìm thấy ứng dụng này Django:
http://httpproxy.yvandermeer.net/
... đó là một chút nặng cho những gì tôi cần thiết (ghi âm và phát lại, đòi hỏi một syncdb để thêm vào công cụ mô hình). Nhưng bạn có thể xem mã nó sử dụng theo quan điểm proxy chung của nó, mà là dựa trên :
http://bitbucket.org/yvandermeer/django-http-proxy/src/1776d5732113/httpproxy/views.py
Dưới đây là một đơn giản chết thực hiện proxy cho 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)
Yêu cầu proxy này từ đường dẫn PROXY_PATH + tới TARGET_URL +. proxy được kích hoạt và cấu hình bằng cách thêm một mẫu URL như thế này để urls.py:
url(r'^PROXY_PATH/(?P<path>.*)$', proxy_to, {'target_url': 'TARGET_URL'}),
Ví dụ:
url(r'^images/(?P<path>.*)$', proxy_to, {'target_url': 'http://imageserver.com/'}),
sẽ thực hiện một yêu cầu đến http: // localhost: 8000/images/logo.png tìm nạp và trả lại tệp tại http://imageserver.com/logo.png.
Chuỗi truy vấn được chuyển tiếp, trong khi các tiêu đề HTTP như cookie và dữ liệu POST không phải là (thật dễ dàng để thêm nếu bạn cần).
Lưu ý: Mục đích này chủ yếu dành cho mục đích phát triển. Cách thích hợp để xử lý proxy trong sản xuất là với máy chủ HTTP (ví dụ: Apache hoặc Nginx).
Toàn bộ vấn đề là để chuyển cookie và dữ liệu POST, vì vậy thay vì nói cho chúng tôi dễ dàng thêm cookie và dữ liệu POST, bạn có thể chỉ cần viết mã? –
Có, có lẽ bạn có thể thêm vào các phần để chuyển cookie và dữ liệu POST? –
- 1. Chế độ xem lớp ở Django
- 2. Django: Thêm non_field_error từ chế độ xem?
- 3. Chuyển danh sách các giá trị sang chế độ xem django qua cuộc gọi jQuery ajax
- 4. Django, hiển thị chế độ xem ở chế độ xem khác?
- 5. Chế độ xem dựa trên Lớp gọi điện thoại Django từ chế độ xem lớp khác
- 6. Thêm nhiều chế độ xem vào Bộ định tuyến hoặc chế độ xem (Django-Rest-Framework)
- 7. Cache chế độ xem django có thông số URL
- 8. Tải chế độ xem trong một chế độ xem khác
- 9. Hiển thị một phần Chế độ xem bằng ajax
- 10. Django + Ajax
- 11. Định vị chế độ xem dưới hai chế độ xem (hoặc chế độ xem thấp nhất)
- 12. Hiển thị chế độ xem từ chế độ không xem/chế độ xem trong mvvmcross
- 13. Quy ước đặt tên cho chế độ xem Django?
- 14. Django: Phục vụ Tải xuống ở Chế độ xem Chung
- 15. Django Chuyển hướng đến chế độ xem trước
- 16. Mở rộng Chế độ xem Chung của Django
- 17. Chế độ xem tùy chỉnh Django vào trang quản trị
- 18. Cách hiển thị tệp PDF ở chế độ xem Django
- 19. Django: Đặt các lựa chọn trường từ chế độ xem?
- 20. Django "Chế độ xem không trả lại đối tượng HttpResponse."
- 21. đặt ngôn ngữ trong chế độ xem django
- 22. Quản trị Django - Chế độ xem thay đổi tùy chỉnh
- 23. Cách đặt tên gói cho chế độ xem django javascript_catalog?
- 24. Cách chỉ định chế độ xem 404 tùy chỉnh cho Django bằng Chế độ xem dựa trên lớp?
- 25. Chế độ xem dựa trên lớp VS Các chế độ xem dựa trên chức năng
- 26. Thêm chế độ xem của trình điều khiển chế độ xem con vào chế độ xem phụ của bộ điều khiển chế độ xem cha mẹ
- 27. Cách thêm chế độ xem phụ vào một chế độ xem trên web để chế độ xem phụ sẽ cuộn cùng với chế độ xem web?
- 28. lỗi Validation trong chế độ AJAX
- 29. django: chế độ xem lớp chung + POST = HTTP 405 (Phương pháp không được phép)
- 30. Chế độ xem tái chế trong chế độ xem danh sách, đáng giá?
Tôi chưa thử nghiệm điều này, nhưng tôi tin rằng mã này sẽ chỉ sao chép nội dung phản hồi chứ không phải tiêu đề HTTP của phản hồi, có thể chứa rất nhiều thông tin hữu ích từ máy chủ. –
@Don: Bạn hoàn toàn đúng! –