[Home] [Credit Search] [Category Browser] [Staff Roll Call] | The LINUX.COM Article Archive |
Originally Published: Monday, 2 October 2000 | Author: Samuli Kärkkäinen |
Published to: develop_articles/Development Articles | Page: 1/1 - [Std View] |
Unix Web Application Architectures - Part 5: An Alternate Approach
In this last chapter of the document I'll mention a completely different approach to web application development. I call this style "Abstracted HTML."
|
Unix Web Application Architectures
1. Introduction and Basic Approaches
2. The Web Server
3. Sessions, Authentication, and Databases
4. Other Issues
5. An Alternate Approach
In this last chapter of the document I'll mention a completely different approach to web application development. I call this style "Abstracted HTML."
In this approach, web programming is made to feel to the programmer as much like traditional GUI programming as possible. HTML elements and constructs are wrapped in persistent objects that know how to render themselves using the browser, and HTTP requests are handled as GUI callbacks. The objects are kept in memory or stored on disk between requests. When a callback for an object arrives, the appropriate method of the object is invoked.
Below is the commented source of that application. Notice that the code is short and easy to understand even for someone who has never done web programming. The question is, does this approach scale to larger programs, or is the web technology too different from traditional GUI programming to make this viable?
#!/usr/bin/python
Import the Web Application Toolkit module.
import wat
Create a new class which subclasses wat.Application. All WAT apps must derive this class and override the construct method.
class TextViewer(wat.Application):
def construct(self):
dialog = wat.Dialog(self, "Text Viewer", align = "center")
Create a text box widget (a form input control).
self.file_input = wat.TextBox(self)
Bind the "changed" event to the display_file method. This means
when the user hits enter, self.display_file will be called.
self.file_input.connect("changed", self.display_file)
Insert the input control created above into the
dialog box at position 0, 0.
dialog.form.set_cell(0, 0, self.file_input)
Create a button on the right of the text box, and bind also
its "clicked" event to self.display_file.
button = wat.Button(self, "Display File")
button.connect("clicked", self.display_file)
dialog.form.set_cell(1, 0, button, width = "100%")
Insert a Text widget containing <hr> at position 1,0 to
create a horizontal line below the two widgets above.
dialog.form.set_cell(0, 1, wat.Text(self, "<hr>"), colspan = 2)
Store the dialog so that we can access it in other methods, and
return it to the caller.
self.dialog = dialog
return dialog
The display_file method is called when the user clicks the Display
File button or hits enter in the input control. This is a
user-defined method and was bound to those events in the construct()
method. The o parameter is the object which this method was
connected to. If the user clicks the button, o will be the Button
widget. If the user hits enter in the input control, o will be the
Input widget. We don't actually use it below, but Python requires it
to be in the parameter list.
def display_file(self, o):
contents = wat.Text(self)
try:
for line in open(self.file_input.value).readlines():
contents.text = contents.text + line + "<br>"
contents.text = "Unable to open file:" + self.file_input.value
self.dialog.form.set_cell(0, 2, contents, colspan = 2)
app = TextViewer()
app.run()
Copyright (c) 2000 by Samuli Kärkkäinen <skarkkai@woods.iki.fi>. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/).
Up-to-date versions of the entire Unix Web Application Architectures document is available at webapparch.sourceforge.net.