Reputation: 865
I'm trying to connect an HTML file with python
Here's my HTML code
<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>
Here's the content of 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()
So yes I am running this using WAMP as my server.
So when I open my HTML file I can see the form but when i press the button all it does is shows me the python code.
What am I doing wrong?
Here's the httpd.conf file in C:\wamp\bin\apache\apache2.2.22\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/*"
Could someone please tell me what I'm doing wrong? I'm losing my mind!
Upvotes: 3
Views: 6986
Reputation: 74
Also the top line of the python scripts needs to point to your interpreter like this.
#!C:\Python27\python.exe -u
Im not sure what the -u is for though I got the info from this page.
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
Upvotes: 1
Reputation: 369
The main problem I see is that you have NOT configured Python scripts to be processed by your IIS Server.
Because the Python Module is NOT enabled, Apache does NOT understand your Python code and simply outputs the fully code as it is.
Please use MOD_WSGI (not MOD_PYTHON) in your WAMP Server. You can learn more here: https://code.google.com/p/modwsgi/
And, this should help you to quickly set it up: https://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide
Refer this: Installing mod_wsgi on WAMP server running on Windows 7
Upvotes: 1
Reputation: 74
I also just figured out that your header line Content-type: text/html\n needs to be changed to Content-type: text/html\r\n Which is the windows way of doing a newline.
Upvotes: 0
Reputation: 3908
Try changing this line:
<form method="POST" action="C:\wamp\www\cgi-bin\nidhi.py">
To this:
<form method="POST" action="/cgi-bin/nidhi.py">
You want the action to be a URL, which will be handled through your server, rather than an absolute path to a local file that your browser knows how to get without your server.
Upvotes: 0