Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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)