3

我正在尝试将 HTML 文件与 python 连接

这是我的 HTML 代码

<html>
<head>
</head>
<body>
<form method="POST" action="C:\wamp\www\cgi-bin\nidhi.py">
    <p>Your first name: <input type="text" name="firstname">
    <p>Your last name: <input type="text" name="lastname">
    <p>Click here to submit form: <input type="submit" value="Yeah!">
    <input type="hidden" name="session" value="1f9a2">
</form>
</body>
</html>

这是 C:\wamp\www\cgi-bin\nidhi.py 的内容

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

def main():
    print "Content-type: text/html\n"
    form = cgi.FieldStorage()   # parse query
    if form.has_key("firstname") and form["firstname"].value != "":
        print "<h1>Hello", form["firstname"].value, "</h1>"
    else:
        print "<h1>Error! Please enter first name.</h1>"

if __name__ == '__main__':
    main()

所以是的,我正在使用 WAMP 作为我的服务器来运行它。

因此,当我打开我的 HTML 文件时,我可以看到表单,但是当我按下按钮时,它所做的只是向我显示 python 代码。

我究竟做错了什么?

这是 C:\wamp\bin\apache\apache2.2.22\conf 中的 httpd.conf 文件

ServerRoot "c:/wamp/bin/apache/apache2.2.22"
Listen 80
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule php5_module "c:/wamp/bin/php/php5.3.13/php5apache2_2.dll"

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User daemon
Group daemon

</IfModule>
</IfModule>
ServerAdmin admin@localhost

ServerName localhost:80

DocumentRoot "c:/wamp/www/"

<Directory />
    Options FollowSymLinks ExecCGI
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
<Directory "c:/wamp/www/">
    Options Indexes FollowSymLinks 
    AllowOverride None
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Directory>
<IfModule dir_module>
    DirectoryIndex index.php index.php3 index.html index.htm
</IfModule>
<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>
ErrorLog "c:/wamp/logs/apache_error.log"
LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "c:/wamp/logs/access.log" common
</IfModule>

<IfModule alias_module>
</IfModule>

<IfModule cgid_module>

</IfModule>

<Directory "C:/wamp/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>
DefaultType text/plain

<IfModule mime_module>

    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .php3

    AddHandler cgi-script .cgi .pl .py
</IfModule>
Include conf/extra/httpd-autoindex.conf


<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Include "c:/wamp/alias/*"

有人可以告诉我我做错了什么吗?我快疯了!

4

4 回答 4

1

我看到的主要问题是您没有配置 Python 脚本以由您的 IIS 服务器处理。

因为没有启用 Python 模块,Apache 不理解你的 Python 代码,只是简单地输出完整的代码。

请在您的 WAMP 服务器中使用 MOD_WSGI(不是 MOD_PYTHON)。您可以在这里了解更多信息:https ://code.google.com/p/modwsgi/

而且,这应该可以帮助您快速设置它:https ://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide

请参阅:在 Windows 7 上运行的 WAMP 服务器上安装 mod_wsgi

于 2013-05-02T06:38:02.810 回答
1

python脚本的第一行也需要像这样指向你的解释器。

#!C:\Python27\python.exe -u

尽管我从该页面获得了信息,但我不确定 -u 的用途。

http://wiki.python.org/moin/CgiScripts

#!C:\Python27\python.exe -u

import cgi

print 'Content-Type: text/plain\n\n' #this line is compulsory to separate body from header in http response
于 2013-05-01T15:15:47.037 回答
0

我还刚刚发现您的标题行 Content-type: text/html\n 需要更改为 Content-type: text/html\r\n 这是 windows 换行的方式。

于 2013-05-01T15:47:44.570 回答
0

尝试更改此行:

<form method="POST" action="C:\wamp\www\cgi-bin\nidhi.py">

对此:

<form method="POST" action="/cgi-bin/nidhi.py">

您希望操作是一个 URL,它将通过您的服务器处理,而不是您的浏览器知道如何在没有服务器的情况下获取的本地文件的绝对路径。

于 2013-05-01T14:45:53.740 回答