Dường như với tôi rằng phương pháp bạn phác thảo trong mã của bạn sẽ hoạt động. Nó thực sự không khác với bất kỳ tài nguyên được bảo vệ nào khác: quan điểm của bạn có thể phục vụ các tệp từ đĩa, bản ghi từ cơ sở dữ liệu, mẫu được hiển thị hoặc bất kỳ thứ gì. Cũng giống như trình trang trí login_required ngăn chặn truy cập trái phép vào các chế độ xem khác, nó sẽ ngăn chặn quyền truy cập đó vào chế độ xem của bạn phục vụ phương tiện được bảo vệ.
Tôi có thiếu gì đó trong câu hỏi của bạn ở đây không? Xin vui lòng làm rõ nếu đó là trường hợp.
CHỈNH SỬA: Đối với liên kết django doc trong nhận xét của bạn: đó là phương pháp chỉ đơn giản là phân phối bất kỳ tệp yêu cầu nào từ một thư mục cụ thể. Vì vậy, trong ví dụ URL đó như /site_media/foo.jpg
, /site_media/somefolder/bar.jpg
sẽ tự động tìm kiếm các tệp foo.jpg
và somefolder/bar.jpg
theo document_root
. Về cơ bản, mọi thứ dưới document_root
sẽ được cung cấp công khai. Điều đó rõ ràng là không an toàn. Vì vậy, bạn tránh điều đó với phương pháp của bạn.
Nó cũng được coi là không hiệu quả vì django chỉ thêm rất nhiều chi phí không cần thiết khi tất cả những gì bạn cần là một cái gì đó giống như Apache để yêu cầu URL và ánh xạ nó vào một tệp trên ổ cứng. (Bạn không cần phiên django, yêu cầu xử lý, v.v.)
Trong trường hợp của bạn, điều này có thể không phải là một mối quan tâm lớn. Trước tiên, bạn đã bảo đảm chế độ xem. Thứ hai, nó phụ thuộc vào các mẫu sử dụng của bạn. Bạn dự đoán bao nhiêu yêu cầu cho các tệp này? Bạn chỉ sử dụng django để xác thực - điều đó có biện minh cho chi phí khác không? Nếu không, bạn có thể xem xét việc phân phối các tệp đó với Apache và sử dụng nhà cung cấp xác thực. Để biết thêm về vấn đề này, hãy xem tài liệu mod_wsgi
:
Có cơ chế tương tự có sẵn dưới mod_python
Tôi tin. (Cập nhật: chỉ nhận thấy câu trả lời khác hãy xem câu trả lời của Andre đối với phương pháp mod_python
..)
EDIT 2: Đối với các mã cho phục vụ một tập tin Với, vui lòng xem đoạn này:
Phương thức send_file
sử dụng FileWrapper, điều tốt để gửi lại các tệp tĩnh lớn (nó không đọc toàn bộ tệp vào bộ nhớ).Bạn sẽ cần phải thay đổi content_type
tùy thuộc vào loại tệp bạn đang gửi (pdf, jpg, v.v.).
Xin chào, tôi nên làm rõ rằng tôi đang cố gắng dàn xếp mối quan tâm sau đây từ tài liệu django: http://docs.djangoproject.com/en/dev/howto/static-files/#the-big -fat-disclaimer Nếu dòng mã psuedo này là hợp lệ, bạn hoàn thành nó như thế nào? # nếu đăng nhập, phân phối "tên tệp" từ Apache Cảm ơn! -Tom – TomFuertes
OK; vừa cập nhật câu trả lời. Hi vọng điêu nay co ich. – ars