After performing some kind of processing on input information, an application will then want to produce some kind of response to indicate what went on. Here are some examples of responses:
The procedure involved in generating a response usually involves the following steps:
The kind of code involved may well resemble the following:
from WebStack.Generic import ContentType
class MyResource:
def respond(self, trans):
[Perform the requested operations.]
if [the operation was successful]:
trans.set_response_code(200)
trans.set_content_type(ContentType("text/html", encoding="utf-8"))
out = trans.get_response_stream()
out.write([some data either as a plain string suitably encoded or as Unicode])
else:
trans.set_response_code(500) # or some other code
trans.set_content_type(ContentType("text/html", encoding="utf-8"))
out = trans.get_response_stream()
out.write([some other data either as a plain string suitably encoded or as Unicode])
As discussed in "Character Encodings", care must be taken generating the response so that it meets any expectations that browsers and other Web clients may have.
Transaction objects have various methods that can be used in generating responses:
set_response_code
200
status condition on the response, meaning that the request was
processed successfully.set_content_type
WebStack.Generic.ContentType
)
which specifies both the media type and the character encoding (if
relevant) of the data sent to the user. The media type describes the
format of the data (eg. text/html
- a Web page), whereas the character encoding describes how any
character information on the page is encoded - see "Character Encodings"
for more information.get_response_stream
Just as applications might need to integrate with other systems in order to fetch information or to perform operations on behalf of the user, the generation of response content can also be made a lot easier by using external libraries. In the above example code, the process of obtaining and formatting the actual data to be written out has been left unspecified, but for anything more complicated than "hello world" it is usually advisable to consider using templating systems which combine raw data and templates to produce formatted output that can be displayed as a Web page (amongst other things).
See "Integration with Other Systems" for more information on the principles of using such external libraries.