Download html - Idris

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Python
Another CGI
Strings
•
•
•
•
Single and double quotes interchangeable
Triple quotes (""") allow multi-line literal quoting
Escaping of \n, %, etc by default
Prefix r can be used for regexps, r'[a-z].*'
• Any variable can be converted to a string with
str(v). Can go back with int(s), float(s)
• Strings operations:
–
–
–
–
Concatenation with +, repeating with *
Length with len()
Substrings with []. Interesting index options.
Special boolean operator in
String Methods
•
•
•
•
•
•
•
count
find
isdigit
upper, lower
rjust, ljust
strip
replace
Tuples and Lists
• Tuples store a set of elements. Syntax:
– foo = ("Korn", "Jeff")
• Lists also store elements but unlike tuples
can be modified (thus cheaper). Syntax:
– foo = ["Korn", "Jeff"]
– foo[1] = "Jeffrey"
• List operations:
– append, extend, +, *, len, index, in, pop, sort,
reverse, join, etc.
• Be careful about references!
Dictionary
• Dictionaries are associative arrays (arrays
indexed by string or number). Values can
be any object.
• Syntax:
– student = {'name' : 'Guido', 'score': 95 }
• Operations:
– has_key, keys, values, len, get, copy, update
• Example:
print student['name']
Statements
• Standard if, then, else
if person == 'Korn':
status = 'teacher'
elif person == 'Cano'
status = 'yankee'
else:
status = 'unknown'
print person, status
• While loops
while n <= 20:
s.append(' ')
n += 2
if magic:
break
a, b = 0, 1
while b < 100:
print b
a, b = b, a + b
for loops
• Similar to shell:
for val in ["foo", "bar", "baz"]:
print "Hello %s" % val
• To do c-style loops, use special function
range:
for val in range(5, 20, 2):
print val
# prints 5, 7, 9 ... 19
• Also: xrange
Exceptions
• Run-time errors are possible with Python,
but they can be caught with try-except:
try:
n = float(inputstring)
m = n * 2
except ValueError, msg:
print msg
# will print: invalid literal for float(): foo
• You can also use: raise, finally
Functions
• Defined with def:
def my_func(foo, bar):
print foo + bar
• Types not needed
• Arguments can have defaults:
def my_func(foo, bar=12):
print foo + bar
my_func(3)
15
my_func(3, bar=3)
• Variables in functions are local
– global changes this
• return used to return values
Modules
• Python modules are libraries of reusable
code with specific functionalities
• Standard modules are distributed with
Python to do a variety of things.
• Modules names are unique, but functions in
modules don't conflict with other modules.
• Modules can have sub-modules.
Using Modules
• Include modules in your program with use, e.g.
import math incorporates the math module
import math
print math.log(4906, 2)
12.0
print math.sqrt(100)
10
Important modules
• sys
– sys.argv, sys.path, sys.platform, sys.exit,
sys.stdin, sys.stderr, sys.stdout
• os
– os.getcwd, os.environ, os.chdir, os.listdir,
os.mkdir, os.rmdir, os.remove, os.system,
os.popen, os.getpid
• os.path
– os.path.abspath, os.path.dirname,
os.path.basename, os.path.join, os.path.split,
os.isfile, os.isdir
HTTP
• Protocol for the Web
• Client-server model
– Client (user agent) is typically web browser
(e.g. Firefox)
– Server is web server (e.g. Apache)
• Client request a resource identified by
URLs
– e.g. http://cs.nyu.edu/csweb/index.html
Apache HTTP Server
•
•
•
•
Open source HTTP (Web) server
Most popular web server since 1996
The “A” in LAMP
Part of Apache Software Foundation
– Other projects: Ant, Hadoop, Tomcat,
SpamAssassin, …
HTTP Transactions
• HTTP request to web server
GET /v40images/nyu.gif HTTP/1.1
Host: www.nyu.edu
• HTTP response to web client
HTTP/1.1 200 OK
Content-type: image/gif
Content-length: 3210
HTML Example
<html>
<head>
<title>Some Document</title>
</head>
<body>
<h2>Some Topics</h2>
This is an HTML document
<p>
This is another paragraph
</body>
</html>
HTML
• File format that describes a webpage
• Can be written by hand, or generated by a
program
• A good way to generate a HTML file is by
writing a shell or Perl script
Gateways
• Interface between resource and a web server
QuickTime™ and a
TIFF (LZW) decompressor
are needed to see this picture.
HTTP
Web Server
Gateway
resource
CGI
• Common Gateway Interface - a standard
interface for running helper applications to
generate dynamic contents
– Specify the encoding of data passed to programs
• Allow HTML documents to be created on the fly
• Transparent to clients
– Client sends regular HTTP request
– Web server receives HTTP request, runs CGI program,
and sends contents back in HTTP responses
• CGI programs can be written in any language
How CGI Works
HTTP request
Web Server
HTTP response
spawn process
QuickTime™ and a
TIFF (LZW) decompressor
are needed to see this picture.
Document
Script
Forms
• HTML forms are used to collect user input
• Data sent via HTTP request
• Server launches CGI script to process data
<form method=POST
action=“http://cs.nyu.edu/~unixtool/cgi-bin/search.cgi”>
Enter your query: <input type=text name=Search>
<input type=submit>
</form>
Input Types
• Text Field
<input type=text name=zipcode>
• Radio Buttons
<input type=radio name=size value=“S”> Small
<input type=radio name=size value=“M”> Medium
<input type=radio name=size value=“L”> Large
• Checkboxes
<input type=checkbox name=extras value=“lettuce”> Lettuce
<input type=checkbox name=extras value=“tomato”> Tomato
• Text Area
<textarea name=address cols=50 rows=4>
…
</textarea>
Submit Button
• Submits the form for processing by the CGI
script specified in the form tag
<input type=submit value=“Submit Order”>
HTTP Methods
• Determine how form data are sent to web
server
• Two methods:
– GET
• Form variables stored in URL
– POST
• Form variables sent as content of HTTP request
Encoding Form Values
• Browser sends form variable as name-value pairs
– name1=value1&name2=value2&name3=value3
• Names are defined in form elements
– <input type=text name=ssn maxlength=9>
• Special characters are replaced with %## (2-digit
hex number), spaces replaced with +
– e.g. “10/20 Wed” is encoded as “10%2F20+Wed”
GET/POST examples
GET:
GET /cgi-bin/myscript.pl?name=Bill%20Gates&
company=Microsoft HTTP/1.1
HOST: www.cs.nyu.edu
POST:
POST /cgi-bin/myscript.pl HTTP/1.1
HOST: www.cs.nyu.edu
…other headers…
name=Bill%20Gates&company=Microsoft
GET or POST?
• GET method for
– Retrieving information, e.g. from a database
– A “safe” method - no action taken other than retrieval
– Embedding data in URL without form element
• POST method for
– Forms with many fields or long fields
– Sending data for updating database, posting to bulletin
board, etc.
• GET requests may be cached by clients browsers
or proxies, but not POST requests
Parsing Form Input
• Method stored in HTTP_METHOD
• GET: Data encoded into
QUERY_STRING
• POST: Data in standard input (from body
of request)
• Most scripts parse input into an associative
array
– Parse it yourself, or
– Use available libraries (e.g. Perl CGI module)
CGI Environment Variables
•
•
•
•
•
•
•
•
•
•
•
DOCUMENT_ROOT
HTTP_HOST
HTTP_REFERER
HTTP_USER_AGENT
HTTP_COOKIE
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REQUEST_METHOD
SERVER_NAME
SERVER_PORT
Example: Comment Form
Part 1: HTML Form
<html>
<center>
<H1>Anonymous Comment Submission</H1>
</center>
Please enter your comment below which will
be sent anonymously to <tt>[email protected]</tt>.
If you want to be extra cautious, access this
page through <a
href="http://www.anonymizer.com">Anonymizer</a>.
<p>
<form action=cgi-bin/comment.cgi method=post>
<textarea name=comment rows=20 cols=80>
</textarea>
<input type=submit value="Submit Comment">
</form>
</html>
Part 2: CGI Script (ksh)
#!/home/unixtool/bin/ksh
. cgi-lib.ksh
ReadParse
PrintHeader
# Read special functions to help parse
print -r -- "${Cgi.comment}" | /bin/mailx -s "COMMENT" kornj
print
print
print
print
"<H2>You submitted the comment</H2>"
"<pre>"
-r -- "${Cgi.comment}"
"</pre>"
Example: Find words in Dictionary
<form action=dict.cgi>
Regular expression: <input type=“text”
name=re value=".*">
<input type=submit>
</form>
Example: CGI Script (ksh)
#!/home/unixtool/bin/ksh
PATH=$PATH:.
. cgi-lib.ksh
ReadParse
PrintHeader
print "<H1> Words matching <tt>${Cgi.re}</tt> in the dictionary
</H1>\n";
print "<OL>"
grep "${Cgi.re}" /usr/dict/words | while read word
do
print "<LI> $word"
done
print "</OL>"
Debugging
• Debugging can be tricky, since error
messages don't always print well as HTML
• One method: run interactively
$ QUERY_STRING='birthday=10/15/03'
$ ./birthday.cgi
Content-type: text/html
<html>
Your birthday is <tt>10/15/02</tt>.
</html>
A Python CGI Script
#!/usr/bin/python
import cgi
import cgitb
cgitb.enable()
form = cgi.FieldStorage()
bday = form['birthday'].value
# Print header
print 'Content-Type: text/html'
print
# Your HTML body
print "Your birthday is %s.\n" % bday
Debugging Python CGI Scripts
• Debugging CGI script is tricky - error messages
don’t always come up on your browser
• Run script with test data
$ python cgiScript prod=“MacBook” price=“1800”
Content-Type: text/html
<html>
…
</html>
CGI Benefits
• Simple
• Language independent
• UNIX tools are good for this because
–
–
–
–
Work well with text
Integrate programs well
Easy to prototype
No compilation (CGI scripts)