[workshop] lesson 00: "hello %s!"
Michal Wallace
workshop@cornerhost.com
Sat, 4 May 2002 23:28:43 -0400 (Eastern Daylight Time)
############################################################
## Hey all,
##
## I've got friends in town this week, so I'm off to a slow
## start here. :) I'm new at this, so let me know if I'm
## moving too fast/slow/etc with this tutorial...
##
## Anyway, here goes!
##
## -Michal
############################################################
## lesson 00: "hello, %s!" #################################
* Hello, World!
The traditonal introduction to a computer language is the
"Hello, World!" program. In python, it's a one-liner:
###
print "hello, world!"
###
Easy, huh? If you load up a python interpreter and type
that line, it'll print "hello, world!" to the screen.
* The Response Object
Web apps don't print their output to a screen, but send it across the
internet. For this reason (and others I'll go into later on), we
redirect the output to a response object. In the framework that I use,
this object is called RES:
###
print >> RES, "hello, world!"
###
That's it! Our first web application!
So how can we see it work?
To run this on a cornerhost server, put it in a text file with the
extension ".app". Call this one "hello.app" and upload it to your
account.
Now load it in your browser as if it were a normal web page. If all
goes well, you should see:
hello, world!
If you get an error message, double check that you have the filename
correct and that the file contains no leading tabs or spaces - python
has very strict rules about whitespace.
* Hello, NAME!
Let's personalize our greeting a bit. Python lets us insert a variable
(a defined value) into our output by using the percent sign:
###
name = "Orville"
print >> RES, "hello, %s!" % name
###
If you upload this script and load it in the browser, the
result should be:
hello, Orville!
* The Request Object
Of course, most of the people using your app won't be named
Orville. One way of passing a name into our app would be to include it
in the query string:
http:// ... /hello.app?name=Gomer
We can read the query string with the REQ (Request) object:
###
name = REQ.get("name")
###
Better yet, we can provide a default:
###
name = REQ.get("name", "whoever you are")
print >> RES, "hello, %s!" % name
###
Try running this with and without a "?name=whatever"
appended to the url.
* Adding a Form
But why settle for a default, when we can simply ask users what their
names are? This next example uses the REQ.has_key() method to tell if
a name has been passed in. If so, it says hello. If not, it shows an
HTML form:
###
if REQ.has_key("name"):
print >> RES, "hello, %s!" % REQ.get("name")
else:
# notice the single quotes, to prevent conflict with HTML:
print >> RES, '<form action="hello.app" method="GET">'
print >> RES, 'What is your name?'
print >> RES, '<input type="text" name="name" value="">'
print >> RES, '<input type="submit">'
print >> RES, '</form>'
###
* Yuck!
There's nothing wrong with that code, but it sure isn't pretty. If
you wanted to make the form look nicer, you'd have to add a whole lot
more of those "print >> RES" lines, and that would get old real fast.
Worse, it's hard to read and hard to maintain.
In the next lesson, we'll look at a way of solving these problems by
separating the logic of an app from its presentation.
-----
(c)2002 sabren enterprises inc
feel free to forward this to a friend!
archives at: http://webAppWorkshop.com/
discussion list: http://www.cornerhost.com/mailman/listinfo/workshop
lessons only: http://www.cornerhost.com/mailman/listinfo/workshop-lite