Python Programming/CGI interface

From Wikibooks, open books for an open world
Jump to navigation Jump to search

The Common Gateway Interface (CGI) allows to execute some Python programs on an HTTP server.


By default, open a .py file in HTTP returns its content. In order to make the server compile and execute the source code, it must be placed in a directory including an .htaccess file, with the lines[1]:

AddHandler cgi-script .py
Options +ExecCGI

Attention: on the Unix-like servers the files aren't executable by default, so this must be set with the command: chmod +x *.py.


The module cgitb is used for debugging:

#!C:\Program Files (x86)\Python\python.exe
# -*- coding: UTF-8 -*-
print "Content-type: text/html; charset=utf-8\n\n"
print "<html><head><title>Local directory</title></head><body>"
import cgitb
import os
print "The CGI file is located into:"
print os.path.dirname(__file__)
print "</body></html>"

The usage of a form needs an import cgi[2].

For a MySQL database, its import MySQLdb[3].

The following file is called, and uses the both modules:

#!C:\Program Files (x86)\Python\python.exe
# -*- coding: UTF-8 -*-
print "Content-type: text/html; charset=utf-8\n\n"
print "<html><head><title>DB CGI</title></head><body>"
print "<h1>MySQL extraction</h1>"
print "<ul>"
import cgitb
import cgi, MySQLdb
form = cgi.FieldStorage()
if form.getvalue('name') == None:
	print "<h2>Research a name</h2>"
	print '''
	<form action="" method="post">
	<input type="text" name="name" />
	<input type="submit"></form>
	print "<h2>Result</h2>"
	print "List for " + form.getvalue('name') + " :"
	connection = MySQLdb.connect(user='login1', passwd='passwd1', db='base1')
	cursor = connection.cursor()
	cursor.execute("SELECT page_title FROM page WHERE name ='"+form.getvalue('name')+"'")
	for row in cursor.fetchall():
		print "<li>%s</li>" % row[0]
print "</ul>"
print "</body></html>"


  1. "HOWTO Use Python in the web".