2011-02-03 39 views
20

Khi tôi thực hiện yêu cầu XÓA XÓA với ứng dụng django. nó trực tiếp trả về một phản hồi 301 (Đã chuyển vĩnh viễn) và chuyển hướng tôi đến GET yêu cầu cùng một url. Tôi đoán rằng yêu cầu Http PUT sẽ trả lại 301 giống như yêu cầu DELETE. Có cách nào để xử lý yêu cầu DELETE với django?Http Xóa yêu cầu đối với django trả về 301 (Đã di chuyển vĩnh viễn)

+8

Có thể bạn đang thiếu dấu gạch chéo sau trong url cho DELETE? –

+0

Bạn có thể xác nhận xem giao diện có liên quan đang được tải không? Có thể đặt một bản ghi bên trong khung nhìn để xác nhận nó đang được nạp. Ngoài ra, điều này có thể được máy chủ web của bạn và không Django ở tất cả đó là chuyển hướng yêu cầu? –

+2

Đó là vấn đề. Khách hàng của tôi là backbone.js và có vẻ như backbone.js không đặt dấu gạch chéo theo sau để tạo mô hình url. vì vậy trong urls.py, tôi đã thêm một cấu hình url khác mà không có dấu gạch chéo và nó hoạt động. – yilmazhuseyin

Trả lời

36

Các chuyển hướng là do APPEND_SLASH thiết lập:

APPEND_SLASH

Mặc định: Đúng

Khi đặt thành True, nếu URL yêu cầu không phù hợp với bất cứ mẫu trong URLconf và nó không kết thúc bằng dấu gạch chéo , chuyển hướng HTTP được cấp cho cùng một URL với dấu gạch chéo nối thêm. Lưu ý rằng chuyển hướng có thể khiến bất kỳ dữ liệu nào được gửi trong yêu cầu POST bị mất bị mất.

Đảm bảo máy chủ và máy khách của bạn nhất quán với dấu gạch chéo.

Nếu dự án của bạn không cần dấu gạch chéo ở tất cả (nghĩa là, nó là một api không có dấu gạch chéo) bạn có thể tắt nó. Nếu không, hãy đảm bảo urlconf của bạn chấp nhận đường dẫn mà không có dấu gạch chéo.

+1

Tùy chọn này đã được cấu hình cho thành phần tài nguyên $ từ angularJS 1.30.beta6 https://github.com/angular/angular.js/commit/3878be52f6d95fca4c386d4a5523f3c8fcb04270 – AlexandruC

+0

Cảm ơn dude, bạn đã cứu ngày của tôi! –

4

Tôi gặp sự cố này khi sử dụng AngularJs và Django REST.

Django Rest đã chuyển hướng ứng dụng khách để yêu cầu URL có dấu gạch chéo trong khi AngularJS '$resource đảm bảo không có dấu gạch ngang theo sau trên URL của nó. Điều này được mô tả trong số này issue

Trên cùng một liên kết, bạn sẽ thấy đề xuất sử dụng dịch vụ $http linh hoạt hơn thay vì $resource. Nhưng ... Tôi thực sự muốn sử dụng $resource (ít mã hơn).

Vì vậy, giải pháp là tầm thường, kể từ khi đội Django còn lại đã chiếm recently này:

router = DefaultRouter(trailing_slash=False) 

http://django-rest-framework.org/api-guide/routers.html

(Tôi đã thêm vào này để tôi blog vì tôi muốn giữ một bản ghi của một vài gotchas sử dụng AngularJS & Django REST) ​​

Các vấn đề liên quan