Tôi đang sử dụng khung hình webpy. Tôi muốn phục vụ tệp tĩnh trên một trong các yêu cầu. Có phương pháp đặc biệt trong khung webpy hoặc tôi chỉ cần đọc và trả lại tập tin đó?Làm cách nào để phân phối tệp trong webpy?
Trả lời
Nếu bạn đang chạy máy chủ dev (không apache):
Tạo một thư mục (hay còn gọi là thư mục) được gọi là tĩnh ở vị trí của kịch bản chạy server web.py. Sau đó, đặt các tệp tĩnh mà bạn muốn phân phối trong thư mục tĩnh. Ví dụ: URL http://localhost/static/logo.png sẽ gửi hình ảnh ./static/logo.png cho khách hàng.
tham khảo: http://webpy.org/cookbook/staticfiles
Update. Nếu bạn thực sự cần phải phục vụ cho một tập tin tĩnh trên /
bạn chỉ có thể sử dụng một chuyển hướng:
#!/usr/bin/env python
import web
urls = (
'/', 'index'
)
class index:
def GET(self):
# redirect to the static file ...
raise web.seeother('/static/index.html')
app = web.application(urls, globals())
if __name__ == "__main__": app.run()
tôi vật lộn với điều này cho hai vợ chồng cuối cùng của giờ ... Yuck!
Tìm thấy hai giải pháp mà cả hai đều làm việc cho tôi ... 1 - trong .htaccess thêm dòng này trước dòng ModRewrite:
RewriteCond %{REQUEST_URI} !^/static/.*
Điều này sẽ đảm bảo rằng yêu cầu đến/tĩnh/thư mục là KHÔNG viết lại để đi đến kịch bản code.py của bạn.
2 - trong code.py thêm một handler tĩnh và một mục url cho mỗi một số thư mục:
urls = (
'/' , 'index' ,
'/add', 'add' ,
'/(js|css|images)/(.*)', 'static',
'/one' , 'one'
)
class static:
def GET(self, media, file):
try:
f = open(media+'/'+file, 'r')
return f.read()
except:
return '' # you can send an 404 error here if you want
Lưu ý - Tôi lấy trộm này từ nhóm web.py google nhưng không thể tìm thấy dang đăng bài nữa!
Một trong những hoạt động được, cả trong các mẫu cho web.py và cho một cuộc gọi trực tiếp đến một trang web mà tôi đưa vào "tĩnh"
Bạn có thấy một số lợi ích cho các phương pháp này trên http://webpy.org/cookbook/staticfiles không? – dimo414
Tôi đã làm việc này - tôi không thể có được các phương pháp khác để làm việc, vì vậy tôi đoán đó là một lợi thế ;-) Tôi đã làm việc trên một tài khoản chia sẻ lưu trữ để có thể có được một số cuộc đấu tranh của tôi. –
@tom - cảm ơn! bạn đã lưu tôi một vài giờ với bài đăng này. – incognick
tôi không khuyên bạn nên phục vụ các tập tin tĩnh với web .py. Bạn nên có apache hoặc nginx cấu hình cho điều đó.
tại sao không? nó sẽ có ích để hiểu lý do của bạn. – Octopus
Vì nó sẽ chậm –
- 1. webpy: Cách phân phát JSON
- 2. Làm cách nào để phân phối chương trình python?
- 3. Làm cách nào để phân phối các tệp đã tải lên trong Play! 2 bằng Scala?
- 4. Làm cách nào để buộc apache phân phối tệp theo định dạng được mã hóa chunked
- 5. Làm cách nào để phân phối ứng dụng Perl của tôi dưới dạng một tệp?
- 6. Làm cách nào để phân phối tệp .dmg thông qua PHP/readfile?
- 7. Làm cách nào để phân phối các tệp phương tiện django qua nginx?
- 8. Làm cách nào để phân phối mã có thể sử dụng lại Android trong gói?
- 9. Bảo vệ tệp jar Java để phân phối
- 10. Tìm tệp trong phân phối mô-đun Python
- 11. Cách tải phân phối trong cụm RabbitMQ?
- 12. các tệp bắt buộc để phân phối ứng dụng .net
- 13. Phân phối tệp để người nhận không thể đọc được
- 14. Làm thế nào để phân phối các tệp tĩnh Django thông qua HTTPS?
- 15. Phân phối tệp settings.xml maven trong môi trường công ty
- 16. Tôi làm cách nào để tạo một cái lọ có thể phân phối cho javadocs?
- 17. Làm cách nào để phân biệt hai tệp trong Perl?
- 18. Làm cách nào để tạo mẫu Java phân phối cho Netbeans 7.1?
- 19. Tệp DMG hoặc Zip để phân phối cho máy Mac?
- 20. XSendFile sẽ không phân phối các tệp trong Apache 2.2
- 21. Làm cách nào để phân phát tệp .flv bằng PHP?
- 22. Làm cách nào để cài đặt bản phân phối tập lệnh từ CPAN?
- 23. Chuyển đổi phân phối đồng đều thành phân phối chuẩn
- 24. Làm cách nào để phân phối Nhà cung cấp Loại F # qua NuGet?
- 25. Làm cách nào để biết tôi đang sử dụng Phân phối Linux nào?
- 26. Làm cách nào để phân phối tập lệnh Python/shell của tôi?
- 27. Làm cách nào để sử dụng Sinatra để phân phối tài liệu XML?
- 28. Tôi làm cách nào để phân phối các tệp có mã hóa UTF-8 bằng Python SimpleHTTPServer?
- 29. Làm cách nào để bạn triển khai phân loại và phân trang trên dữ liệu được phân phối?
- 30. Làm thế nào để phân phối dự án java được xây dựng trong Eclipse?
chỉ phân phối tệp trong/đường dẫn tĩnh, tôi cần phân phối index.html theo yêu cầu với đường dẫn/ – codez
@codez: Đã cập nhật câu trả lời của tôi. – miku
tính năng này chỉ hoạt động nếu bạn chạy ứng dụng web.py trực tiếp từ thư mục chứa nó. nếu bạn muốn chạy /path/to/my/web/app.py bạn không may mắn. – Octopus