Web Programming with Apache and Python Web Programming with Apache and Python

thumbsshameServers

Nov 17, 2013 (3 years and 9 months ago)

96 views



Web Programming with Apache and Python
Web Programming with Apache and Python
Balamurugan S
Email:
balamurugan.sekar@gmail.com
Web:
http://www.bitbala.org/


Agenda


Introduction to Web


Introduction to Apache


Web Programming with Python and CGI


Web Programming with Python and mod_python

Web Programming with Apache and Python


Introduction to Web


Internet


Need for dynamic content over Web


Web servers

Web Programming with Apache and Python


Web servers


Computer program which delivers the content to users
over Hypertext Transfer protocol (HTTP) over the World
Wide Web (WWW)


Apache httpd, Apache Tomcat, Microsoft IIS, Google
GWS, lighthttpd

Web Programming with Apache and Python


How web server works?

Web Programming with Apache and Python
Web Clients - Browsers
Web Servers
Applications
1. Sends request
3. Sends res
pon
se
2. Request External
executions


Apache – Installation


Debian based systems
apt-get install apache2


RPM based systems
yum install apache2


Can be downloaded and compiled :)

Web Programming with Apache and Python


Introduction to CGI


Common Gateway Interface


Written using high level languages


Commonly used High level languages are

C/C++

Python

Perl

PHP


CGI is no longer widely used


CGI is good for small applications

Web Programming with Apache and Python


CGI


How CGI scripts are different from normal scripts?


What kind of Inputs it takes?


How to generate the output?

Since it is sending the data to Web browsers, it
should send valid HTTP Data (MIME Headers +
HTML)

Web Programming with Apache and Python


Apache Configuration for CGI

Web Programming with Apache and Python
<Di r ect or y "/pat h/t o/cgi/scr i pt s">
Al l owOver r i de None
Opt i ons +ExecCGI
AddHandl er cgi - scr i pt .py
Or der al l ow,deny
Al l ow f r om al l
</Di r ect or y>
<Di r ect or y "/pat h/t o/cgi/scr i pt s">
Opt i ons Al l
</Di r ect or y


Change

the content of /etc/apache2/sites-available


Hello World!!!

Web Programming with Apache and Python
1 #!/usr/bi n/pyt hon
2 pr i nt "Cont ent - t ype:t ext/ht ml\r\n\r\n"
3 pr i nt '<ht ml >'
4 pr i nt '<head>'
5 pr i nt '<t i t l e>Hel l o Wor d - Fi r st CGI Pr ogr am</t i t l e>'
6 pr i nt '</head>'
7 pr i nt '<body>'
8 pr i nt '<h2>Hel l o Wor d! Thi s i s my f i r st CGI pr ogr am</h2>'
9 pr i nt '</body>'
10 pr i nt '</ht ml >'


Helloworld.py
Line 2 – Sends the HTTP Header to browser.


CGI Environment Variables

Web Programming with Apache and Python
1 #!/usr/bi n/pyt hon
2 i mpor t os
3 pr i nt "Cont ent - t ype: t ext/ht ml\r\n\r\n";
4 pr i nt "<f ont si ze=+1>Envi r onment </f ont ><\br >";
5 f or par am i n os.envi r on.keys( ):
6 pr i nt "<b>%s</b>: %s<\br >" % ( par am,os.envi r on[ par am] )


CONTENT_TYPE, CONTENT_LENGTH, HTTP_COOKIE, HTTP_USER_AGENT,
PATH_INFO, QUERY_STRING, REMOTE_ADDR, REMOTE_HOST,
REQUEST_METHOD, SCRIPT_FILENAME, SCRIPT_NAME, SERVER_NAME,
SERVER_SOFTWARE
To print the CGI Environment Variables


cgi module

Web Programming with Apache and Python


Primary module to be used in CGI programming in

python


FieldStorage is the primary class that will be used


A object has to be created for FieldStorage when

python CGI scripts begins


The object will read all the pertinent user info sent

by web client in a dictionary


Name given in the form will be keys and Values of
the form elements will be values in dictionaries


Sending data over Forms - GET

Web Programming with Apache and Python
<f or m act i on="user _get.py" met hod="get">
Fi r st Name: <i nput t ype="t ext" name="f i r st _name"> <br />
Last Name: <i nput t ype="t ext" name="l ast _name" />
<i nput t ype="submi t" val ue="Submi t" />
</f or m>
userform_get.html
1 #!/usr/bi n/pyt hon
2 i mpor t cgi, cgi t b
3 user _dat a = cgi.Fi el dSt or age( )
4 f i r st _name = user _dat a.get val ue('f i r st _name')
5 l ast _name = user _dat a.get val ue('l ast _name')
6 pr i nt "Cont ent - t ype:t ext/ht ml\r\n\r\n"
7 pr i nt "<ht ml >"
8 pr i nt "<head>"
9 pr i nt "<t i t l e>Sendi ng Dat a - GET</t i t l e>"
10 pr i nt "</head>"
11 pr i nt "<body>"
12 pr i nt "<h2>Hel l o %s %s</h2>" % ( f i r st _name, l ast _name)
13 pr i nt "</body>"
14 pr i nt "</ht ml >"
user_get.py


Sending data over Forms - POST

Web Programming with Apache and Python
<f or m act i on="user _post.py" met hod="post">
Fi r st Name: <i nput t ype="t ext" name="f i r st _name"> <br />
Last Name: <i nput t ype="t ext" name="l ast _name" />
<i nput t ype="submi t" val ue="Submi t" />
</f or m>
userform_post.html
1 #!/usr/bi n/pyt hon
2 i mpor t cgi, cgi t b
3 user _dat a = cgi.Fi el dSt or age( )
4 f i r st _name = user _dat a.get val ue('f i r st _name')
5 l ast _name = user _dat a.get val ue('l ast _name')
6 pr i nt "Cont ent - t ype:t ext/ht ml\r\n\r\n"
7 pr i nt "<ht ml >"
8 pr i nt "<head>"
9 pr i nt "<t i t l e>Sendi ng Dat a - GET</t i t l e>"
10 pr i nt "</head>"
11 pr i nt "<body>"
12 pr i nt "<h2>Hel l o %s %s</h2>" % ( f i r st _name, l ast _name)
13 pr i nt "</body>"
14 pr i nt "</ht ml >"
user_post.py


cgitb module

Web Programming with Apache and Python


This module provides a special exception handler for

Python scripts


This will help you in debugging the CGI scripts


After activating this module, if an uncaught exception
occurs, a detailed, formatted report will be displayed.


To use the module you have to

i mport cgi tb


To enable the module

cgi tb.enabl e()


Passing check box

Web Programming with Apache and Python
<f or m act i on="user _checkbox.py" met hod="POST" t ar get ="_bl ank">
<i nput t ype="checkbox" name="mat hs" val ue="on" /> Mat hs
<i nput t ype="checkbox" name="physi cs" val ue="on" /> Physi cs
<i nput t ype="submi t" val ue="Sel ect Subj ect" />
</f or m>
userform_checkbox.html
1 #!/usr/bi n/pyt hon
2 i mpor t cgi, cgi t b
3 f or m = cgi.Fi el dSt or age( )
4 i f f or m.get val ue('mat hs'):
5 mat h_f l ag = "ON"
6 el se:
7 mat h_f l ag = "OFF"
8 i f f or m.get val ue('physi cs'):
9 physi cs_f l ag = "ON"
10 el se:
11 physi cs_f l ag = "OFF"
12 pr i nt "Cont ent - t ype:t ext/ht ml\r\n\r\n"
13 pr i nt "<ht ml ><head><t i t l e>Checkbox</t i t l e>"
14 pr i nt "</head><body>"
15 pr i nt "<h2> CheckBox Mat hs i s : %s</h2>" % mat h_f l ag
16 pr i nt "<h2> CheckBox Physi cs i s : %s</h2>" % physi cs_f l ag
17 pr i nt "</body></ht ml >"
user_checkbox.py


Passing Radio buttons

Web Programming with Apache and Python
<f or m act i on="r adi obut t on.py" met hod="post" t ar get ="_bl ank">
<i nput t ype="r adi o" name="subj ect" val ue="mat hs" /> Mat hs
<i nput t ype="r adi o" name="subj ect" val ue="physi cs" /> Physi cs
<i nput t ype="submi t" val ue="Sel ect Subj ect" />
</f or m>
userform_radiobutton.html
#!/usr/bi n/pyt hon
i mpor t cgi, cgi t b
f or m = cgi.Fi el dSt or age( )
i f f or m.get val ue('subj ect'):

subj ect = f or m.get val ue('subj ect')
el se:

subj ect = "Not set"
pr i nt "Cont ent - t ype:t ext/ht ml\r\n\r\n"
pr i nt "<ht ml ><head><t i t l e>Radi o</t i t l e>"
pr i nt "</head><body>"
pr i nt "<h2> Sel ect ed Subj ect i s %s</h2>" % subj ect
pr i nt "</body></ht ml >"
radiobutton.py


File Upload

Web Programming with Apache and Python
<ht ml >
<body>

<f or m enct ype="mul t i par t/f or m- dat a" act i on="save_f i l e.py" met hod="post">

<p>Fi l e: <i nput t ype="f i l e" name="f i l ename" /></p>

<p><i nput t ype="submi t" val ue="Upl oad" /></p>

</f or m>
</body>
</ht ml >
fileupload.html
#!/usr/bi n/pyt hon
i mpor t cgi, os
i mpor t cgi t b; cgi t b.enabl e( )
f or m = cgi.Fi el dSt or age( )
f i l ei t em = f or m['f i l ename']
i f f i l ei t em.f i l ename:

f n = os.pat h.basename( f i l ei t em.f i l ename)

open('/t mp/' + f n, 'wb').wr i t e( f i l ei t em.f i l e.r ead( ) )

message = 'The f i l e "' + f n + '" was upl oaded successf ul l y'
el se:

message = 'No f i l e was upl oaded'
pr i nt """Cont ent - Type: t ext/ht ml\n
<ht ml ><body><p>%s</p></body></ht ml >""" % ( message,)
fileupload.py


mod_python


A module to connect Python and Apache


Main advantages of mod_python over traditional CGI

is performance


Sample performance data
St andar d CGI: 23 r equest s/s
Mod_pyt hon cgi handl er: 385 r equest s/s
Mod_pyt hon publ i sher: 476 r equest s/s
Tests are done wi th 1.2GHz Penti num machi ne sendi ng 1000 requests wi th
f requency of 1

Web Programming with Apache and Python


mod_python - Installation


Debian based Systems

apt- get i nstal l l i bapache2- mod- python


RPM based systems

apt- get i nstal l l i bapache2- mod- python

Web Programming with Apache and Python


mod_python – Configuring Apache

Web Programming with Apache and Python
<Di r ect or y "/pat h/t o/scr i pt s">

Set Handl er mod_pyt hon .py

Pyt honHandl er mod_pyt hon.publ i sher


Pyt honDebug On


Pyt honAut oRel oad On


Pyt honPat h "sys.pat h + ['/pat h/t o/modul es']"

</Di r ect or y>


Change

the content of /etc/apache2/sites-available


Hello World!!!

Web Programming with Apache and Python
1 def i ndex( ):
2 s = """\
3 <ht ml >
4 <body>
5 <h2>Hel l o Wor l d!</h2>
6 </body>
7 </ht ml >
8 """
9 r et ur n s


Helloworld.py


URL to access this -
http://localhost/hello.py/index
or

http://localhost/hello.py


Hello World!!! - one more time

Web Programming with Apache and Python
s = """\
<ht ml ><body>
<h2>Hel l o %s!</h2>
</body></ht ml >
"""
def i ndex( ):

r et ur n s % 'Wor l d'

def ever ybody( ):

r et ur n s % 'ever ybody'
def _hi det hi sf unct i on

r et ur n “You cannot access t hi s f unct i on”


Helloworld_new.py


URL to access everybody function

http://localhost/helloworld_new.py/everybody


Function starting with _ will be hidden to the web


Sending form data

Web Programming with Apache and Python


Request object will hold the user data sent over Web
<ht ml ><body>
<f or m act i on="show.py/out put" met hod="post">
<p>Type Your name: <i nput t ype="t ext" name="user name">
<i nput t ype="submi t" val ue="Submi t"></p>
</f or m>
</body></ht ml >
user_form.htm
l
def out put ( r eq):

name = r eq.f or m['user name']

s = """\
<ht ml ><body>
<p>The submi t t ed wor d was "%s"</p>
<p><a hr ef ="user _f or m.ht ml">Submi t anot her wor d!</a></p>
</body></ht ml >
"""

r et ur n s % name

show.py


File Upload

Web Programming with Apache and Python
<ht ml >
<body>

<f or m enct ype="mul t i par t/f or m- dat a" act i on="upl oad.py/upl oad" met hod="post">

<p>Fi l e: <i nput t ype="f i l e" name="f i l ename" /></p>

<p><i nput t ype="submi t" val ue="Upl oad" /></p>

</f or m>
</body>
</ht ml >
fileupload.html
def upl oad( r eq):

f i l ename = r eq.f or m['f i l ename'].f i l ename

f p = "/t mp/"+f i l ename

f = f i l e( f p,'wb')

f i l e_cont ent s = r eq.f or m['f i l ename'].f i l e

dat a = f i l e_cont ent s.r ead( )

f.wr i t e( dat a)

f.cl ose


r et ur n "Fi l e upl oad successf ul ”
upload.py


Thank you

Web Programming with Apache and Python
?


References

Web Programming with Apache and Python


Python Reference - Dive into Python
(
http://www.diveintopython.org
)


Web programming using CGI
(
http://www.tutorialspoint.com/python/python_cgi_programming.htm
)


Web python tutorial -
(
http://webpython.codepoint.net/
)