2012-08-24 122 views
1

如何在不使用框架的情況下從頭開始創建網站?沒有框架的網站

我想創建一個與數據庫通信並根據用戶活動動態顯示內容的Web服務。

我希望外觀是HTML5/CSS3。

我寧願通過python與數據庫通信,或去。

該數據庫是Cassandra。

我覺得我已經將所有這些努力放在嘗試限制選項並運行API的框架上,因爲我不知道API正在做什麼。

我想要一個超級簡單的例子,我可以理解雙向通信的基礎知識。我想我的/ var/www會是這樣的:

#LS的/ var/WWW

的index.html datawriteandread.py

作爲一個index.html一樣簡單的例子:有兩個盒子,一個接受文本並將其提交給數據庫的盒子,另一個盒子列出第一個該數據庫的內容。

第二個文件datawriteandread.py用於與數據庫通信以添加新內容並在HTML中顯示舊內容。

我的無知在想要如此簡單的事情上表現出什麼樣的東西?

將python寫入Cassandra很容易,它是HTML中的通信和顯示,我迷失了方向。我有編程印章,但webdev對我來說是全新的。

回答

0

您可以使用CGI來做到這一點。一個簡單的Python CGI腳本可能是:

print "Content-type: text/html" 
print 

print "Hello, world!" 

設置Web服務器來運行Python程序作爲一個CGI腳本將取決於您選擇的Web服務器的詳細數據。但是,您可以參考文檔中的CGI部分。

Python cgi module具有多種功能,對於提取瀏覽器提交的表單數據等工作很有幫助。

+0

難道這就是這些框架正在做的背後現場S' – Peregrine

+0

可能不是;有許多可能的方式與Web服務器集成,而CGI是最簡單和最不復雜的(但對繁忙網站具有性能影響)。另一種流行的Python方法是WSGI。 –

+0

我認爲CGI類似於運行可執行文件的web服務器(在這種情況下是python.exe),並將標準輸出重定向到HTTP響應;正確? –

0

我認爲使用Python的最大腦死亡,簡單的方法將是CGI script。您的Web服務器只會運行您的Python腳本並將輸出重定向到響應。沒有框架,沒有任何東西。

你可以谷歌的「Python CGI」,並獲得大量的例子,如this one。從那裏,您可以使用您選擇的Python數據庫驅動程序直接與數據庫進行交互。您的HTML將直接將POST數據直接發送到您的Python腳本。

+0

你是什麼意思由腦死亡?我可能會誤解它,但是如果我解釋你的意思是對的,我想我認爲使用框架是大腦死亡的選擇。它會爲你做的工作,而你學習一些,除了預期的用途,無用的抽象層? – Peregrine

+0

我的意思是誇大這種架構的簡單性。你和原始的HTTP響應之間沒有任何關係。沒有不必要的抽象級別,也沒有下載框架。只要你打印出你想讓客戶看到的東西。 –

+0

如果我發現我比Python更喜歡其他語言,那麼我只需要搜索其他語言的CGI協議? – Peregrine

0

此配置的Apache2:

http://narnia.cs.ttu.edu/drupal/node/43 添加

的ScriptAlias/cgi-bin目錄/在/ var/WWW/cgi-bin目錄/

<Directory "/var/www/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Order allow,deny 
     Allow from all 
     AddHandler cgi-script .py      # tell Apache to handle every file with .py suffix as a cgi program 
     AddHandler default-handler .html .htm # tell Apache to handle HTML files in regular way 
</Directory> 

到/ etc /的Apache2 /網站可用/默認

而這個鱈魚Ë片段:

http://wiki.python.org/moin/CgiScripts ...(感謝邁克·克里斯滕森此鏈接)

1 #!C:\Python27\python.exe -u 
    2 #!/usr/bin/env python 
    3 
    4 import cgi 
    5 import cgitb; cgitb.enable() # for troubleshooting 
    6 
    7 print "Content-type: text/html" 
    8 print 
    9 
    10 print """ 
    11 <html> 
    12 
    13 <head><title>Sample CGI Script</title></head> 
    14 
    15 <body> 
    16 
    17 <h3> Sample CGI Script </h3> 
    18 """ 
    19 
    20 form = cgi.FieldStorage() 
    21 message = form.getvalue("message", "(no message)") 
    22 
    23 print """ 
    24 
    25 <p>Previous message: %s</p> 
    26 
    27 <p>form 
    28 
    29 <form method="post" action="index.cgi"> 
    30  <p>message: <input type="text" name="message"/></p> 
    31 </form> 
    32 
    33 </body> 
    34 
    35 </html> 
    36 """ % cgi.escape(message) 

結合起來,給我正是我想要的SAN的數據庫,但執行是符合邏輯的。

這裏是下一個步驟。

http://www.java2s.com/Tutorial/Python/0440__CGI-Web/Loginform.htm

你的index.htm:

<HTML> 
<HEAD><TITLE>Login Page</TITLE></HEAD> 
<BODY> 
<CENTER> 
<FORM method="POST" action="http://yourserver/cgi-bin/login.py"> 
<paragraph> Enter your login name: <input type="text" name="login"> 
<paragraph> Enter your password: <input type=password name="password"> 
<paragraph> <input type="submit" value="Connect"> 
</FORM> 
</CENTER> 
<HR> 

</form> 
</BODY> 
</HTML> 

你login.py CGI:

#!/usr/local/bin/python 
import cgi 

def header(title): 
    print "Content-type: text/html\n" 
    print "<HTML>\n<HEAD>\n<TITLE>%s</TITLE>\n</HEAD>\n<BODY>\n" % (title) 

def footer(): 
    print "</BODY></HTML>" 

form = cgi.FieldStorage() 
password = "python" 

if not form: 
    header("Login Response") 
elif form.has_key("login") and form["login"].value != "" and form.has_key("password") and form["password"].value == password: 
    header("Connected ...") 
    print "<center><hr><H3>Welcome back," , form["login"].value, ".</H3><hr></center>" 
    print r"""<form><input type="hidden" name="session" value="%s"></form>""" % (form["login"].value) 
    print "<H3><a href=browse.html>Click here to start browsing</a></H3>" 

else: 
    header("No success!") 
    print "<H3>Please go back and enter a valid login.</H3>" 

footer()