2012-08-24 119 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()