2009-10-07 44 views
7

Rất có thể đó là câu hỏi ngớ ngẩn đối với những người biết câu trả lời, nhưng tôi là người mới bắt đầu và ở đây:Python: cách hiển thị kết quả trên trang web?

Tôi có một tập lệnh Python chạy trong dòng lệnh với một số tham số và in cho tôi một số kết quả. Giả sử kết quả là một số mã HTML.

Tôi chưa bao giờ thực hiện bất kỳ lập trình Python nào cho web và không thể tìm ra ... Tôi cần có một trang (OK, tôi biết cách tải tệp lên máy chủ, Apache đang chạy, Python được cài đặt trên máy chủ ...) với trường chỉnh sửa, sẽ chấp nhận tham số đó và nút Gửi và tôi cần nó để "in" kết quả trên trang web sau khi người dùng gửi thông số thích hợp hoặc hiển thị bất kỳ đầu ra nào trong tình huống dòng lệnh được in.

Tôi đã đọc các chương của Dive Into Python về "HTML Processing" và "HTTP Web Services", nhưng chúng không mô tả những gì tôi đang tìm kiếm.

Nếu câu trả lời không ngắn, tôi sẽ đánh giá rất cao các liên kết đến nội dung có liên quan hơn để đọc hoặc có thể là từ khóa để google cho nó.

Trả lời

2

Có vẻ như bạn chỉ cần bật CGI on apache, điều này sẽ chuyển hướng sản lượng của bạn đến đầu ra của máy chủ web.

Python có CGI library bạn có thể xem qua nó.

Dưới đây là một essay by Guido (một chút ngày)

Và một interactive instruction trông đầy hứa hẹn.

p.s.

Có lẽ bạn cũng có thể muốn xem đề nghị của Google cho Google app engine này (nó có thể không được những gì bạn muốn mặc dù)

+0

Có rất nhiều ví dụ ngoài đó. Và rất nhiều khung công tác. Tôi không biết liệu có ai sử dụng điều này hay không, nhưng tôi đã từng sử dụng khuôn khổ "xoắn" để phát triển ứng dụng web bằng Python. Rất nhiều người sử dụng rất nhiều thứ, kể cả Django. Bắt đầu từ đâu? Có lẽ là nơi Oscar nói để bắt đầu. –

1

Rất tiếc, nhưng dịch vụ web HTTP những gì bạn đang tìm kiếm. Hãy suy nghĩ theo cách này - bạn đặt một biểu mẫu trên trang web và nút gửi. Điều đó chuyển đến dịch vụ web chấp nhận yêu cầu và yêu cầu này nhai theo yêu cầu đó và trả về một phản hồi - là một trang html. Bạn không bao giờ phải thực sự lưu html, nó luôn được tạo động, nhưng đó là một trang hợp lệ của html dù sao.

Nhìn vào django http://www.djangoproject.com/ cho bộ công cụ dịch vụ web dựa trên trăn chất lượng cao. Bước đầu tiên để hiểu thành ngữ yêu cầu/phản hồi là suy nghĩ về yêu cầu dưới dạng được định dạng cụ thể (được định nghĩa bởi CGI - tức là, đó là một hành động GET hoặc POST HTML) của các tham số dòng lệnh và phản hồi dưới dạng đầu ra được định dạng cụ thể (HTML) được gửi đi, không được gửi đi, nhưng trên "dây" tới một số trình duyệt. Gửi yêu cầu đến trên toàn bộ dây và thực thi tập lệnh với một số tham số và bạn sẽ nhận được kết quả đầu ra - trang HTML được định dạng của bạn.

+2

Django chắc chắn có vẻ như quá mức cần thiết đối với loại sự cố này ... – Hortitude

+0

+1 với người nhận xét cho biết "quá mức cần thiết". –

4

Đối với một nhiệm vụ đơn giản như vậy, có thể bạn không cần nhiều hơn CGI. May mắn là Python có một mô-đun cgi được tích hợp sẵn, bạn nên làm những gì mình muốn.

Hoặc bạn có thể xem xét một số khung công tác web tối thiểu, chẳng hạn như web.py.

0

Tôi đồng ý hoàn toàn với Matt - Django là những gì bạn muốn.Django cung cấp một giải pháp hoàn chỉnh, và tài liệu thực sự tuyệt vời sẽ giúp bạn có được một cái gì đó đi. Nếu ứng dụng của bạn phát triển và trở nên phức tạp hơn, Django vẫn có thể hoạt động; Django hoạt động ngay cả đối với các trang web rất lớn và rất phức tạp.

Hãy xem sách miễn phí, The Django Book.

Một điểm cộng khác với Django: nếu bạn làm ứng dụng web của mình ở Django, bạn có thể chuyển nó sang Google App Engine.

+3

Vì vậy, bỏ phiếu matt lên? Tại sao một câu trả lời thứ hai. –

+0

@Warren P, tôi đã cung cấp câu trả lời thứ hai vì tôi muốn nói một số điều mà Matt không nói. Ý tôi là, chỉ cần so sánh câu trả lời của tôi với anh ta; chúng không giống hệt nhau. Tôi thừa nhận rằng anh ta đã trả lời nó đầu tiên bởi vì tôi đã không cố gắng lừa ai đó để vượt qua tôi thay vì Matt - tôi chỉ đang cố gắng để giúp ích. Có lẽ bạn cảm thấy câu trả lời của tôi không đóng góp gì hữu ích; nếu vậy, tôi đề nghị bạn downvote tôi. – steveha

+0

Một câu hỏi nghiêm túc cho cộng đồng ở đây: liệu có phải cách xử lý StackOverflow tốt hơn đã đi vào câu trả lời của Matt và bắt đầu chỉnh sửa nó để thêm các điểm khác của tôi vào nó? Cho đến nay tôi chưa chỉnh sửa câu trả lời khác trừ khi họ có lỗi hoặc mã cần sửa. Có vẻ như sai lầm khi trộn lẫn suy nghĩ của tôi với suy nghĩ của người khác mà không hỏi và tôi nghĩ rằng điều đúng là đăng câu trả lời của riêng tôi. Tôi có sai khi làm việc này không? – steveha

0

Tôi chưa đọc DIVE INTO PYTHON, vì vậy có thể những gì tôi nói là thừa. Như Daniel đã nói, CGI có thể làm việc cho bạn. Những ngày này sẽ chỉ là trường hợp cho các công cụ đơn giản với số lượng truy cập khá thấp. Mô-đun Python CGI được ghi thành tài liệu here. Tôi đã luôn luôn sử dụng mô-đun đó để xử lý biểu mẫu và chỉ thực hiện các bản in cho đầu ra. Tốt nhất là tôi đã có thể tìm ra, đó là cách làm thông thường, nhưng tôi đã không làm được nhiều CGI với Python.

Bạn không nói những gì bạn đang làm, vì vậy tôi sẽ nói rõ điều gì có thể rõ ràng: Hãy chắc chắn rằng bạn đang nói với máy chủ rằng bạn đang xuất ra một trang web với đầu ra đầu tiên của bạn là kiểu nội dung theo sau là một dòng trống. Thông thường điều này được thực hiện với:

print "Content-Type: text/html" 
print 

(Đối với Python 2, 3 bạn sẽ cần phải làm cho bản in của bạn vào các cuộc gọi chức năng.) Sau đó, bạn in html, tiêu đề, cơ thể của bạn, vv thẻ và nội dung thực tế.

0

A hiện tại phương pháp tạo đơn giản (một trong số) Python máy chủ trang web là wsgiref module.

wsgiref là tham chiếu thực hiện đặc tả WSGI có thể được sử dụng để thêm hỗ trợ WSGI vào máy chủ web hoặc khung công tác.

Xem một số SO qusetions (https://stackoverflow.com/search?q=[python]+wsgiref) để biết một số ví dụ về mã và các đề xuất khác.

Các wsgiref example là một nơi tốt để bắt đầu:

from wsgiref.simple_server import make_server 

def hello_world_app(environ, start_response): 
    status = '200 OK' # HTTP Status 
    headers = [('Content-type', 'text/plain')] # HTTP Headers 
    start_response(status, headers) 

    # The returned object is going to be printed 
    return ["Hello World"] 

httpd = make_server('', 8000, hello_world_app) 
print "Serving on port 8000..." 

# Serve until process is killed 
httpd.serve_forever() 
+0

wsgi được coi là "tốt hơn" so với cgi, chủ yếu là do khả năng mở rộng trong các ứng dụng sản xuất, phải không? CGI là không quan trọng đối với bất kỳ ứng dụng nhỏ hơn "ít hơn 10 người dùng" ở đó. Và nó không phải là một nơi tồi tệ để bắt đầu với việc học CGI và sau đó chuyển sang wsgi, phải không? –

+0

Tôi nghĩ rằng ví dụ về WSGI đủ đơn giản - một lựa chọn phức tạp tương tự với CGI. – gimel

2

ai máy chủ web? Nếu nó là một máy chủ web được cung cấp bởi một công ty lưu trữ web hoặc một người nào khác và bạn không có quyền kiểm soát nó, bạn cần phải xác định theo cách thức họ hỗ trợ việc sử dụng Python để viết các ứng dụng web. Không đủ để biết rằng họ có sẵn Python.

Như được chỉ ra bởi những người khác, có khả năng ít nhất các tập lệnh CGI sử dụng Python sẽ được hỗ trợ. Tuy nhiên, CGI không thực sự thiết thực khi chạy các khung công tác web Python lớn như Django.

Có thể mặc dù máy chủ web cũng có thể hỗ trợ FASTCGI. Nếu đó là trường hợp nó có thể sử dụng các khung công tác web Python lớn hơn như FASTCGI sử dụng các quy trình liên tục khi CGI tạo ra một quy trình cho mỗi yêu cầu, nơi mà chi phí của các khung công tác web Python lớn thường khiến việc sử dụng CGI không thực tế.

Nếu máy chủ Apache được kiểm soát bởi những người khác sử dụng máy chủ web Python độc lập như wsgiref và ủy quyền cho máy chủ Apache từ Apache sẽ không thể thực hiện được vì bạn không thể thiết lập Apache để thực hiện.

Vì vậy, tìm hiểu cách sử dụng Python cho các ứng dụng web được hỗ trợ và tìm hiểu xem bạn có phải là người dùng của cá thể Apache hay không hoặc bạn có một số biện pháp kiểm soát việc thay đổi các tệp cấu hình chung của nó hay không. Điều này sẽ quyết định những gì bạn có thể làm và sử dụng.

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