Preface
2
The code in this book is released under the BSD license, unless otherwise specied, and is
available online on a dedicated GitHub repository listed below. Python code should follow a
style convention called PEP 8. We have followed that convention for the code posted online,
but we have compressed the listings in the printed book in order to follow the Packt style
guide, and reduce the need for wrapping long lines.
We trust this book will be a valuable resource for both new web2py developers and
experienced ones. Our goal is still to make the web a more open and accessible place.
We contribute by providing web2py and its documentation to enable anyone to build new
infrastructure and services with agility and efciency.
What this book covers
Chapter 1, Deploying web2py. In this chapter, we discuss how to congure various web
servers to work with web2py. This is a necessary setup for a production environment. We
consider the most popular servers, such as Apache, Cherokee, Lighttpd, Nginx, CGI, and
IIS. The corresponding recipes provide examples of usage of the different adapters, such
as mod_wsgi, FastCGI, uWSGI, and ISAPI. Therefore, they can easily be extended to
many other web servers. Using a production web server guarantees speedier serving of
static les, better concurrency, and enhanced logging capabilities.
Chapter 2, Building Your First Application. We guide the reader through the process of creating
a few non-trivial applications, including a
Contacts application, a Reddit clone, and a
Facebook clone. Each of these applications provides user authentication, multiple tables
connected by relations, and Ajax functionality. In the second part of the chapter, we discuss
further customization of generic web2py applications, such as building a plugin to serve at
pages, adding a logo to the header, customizing the menu, and allowing users to select their
preferred language. The main focus of this chapter is on modularity and reusability.
Chapter 3, Database Abstraction Layer. The DAL is arguably the most important component
of web2py. In this chapter, we discuss various ways to import models and data from existing
sources (csv les, mysql, and postgresql databases), and how to create new models. We
deal with recurrent situations, such as tagging data and efciently searching the database
using tags. We implement a tree representation using the pre-order tree traversal method. We
demonstrate how to work around some of the limitations of the Google App Engine platform.
Chapter 4, Advanced Forms. One of the strengths of web2py is its ability to automatically
generate forms from the data representation. Yet, inevitably, the most demanding users
feel the need to customize these forms. In this chapter, we provide examples of typical
customizations, such as adding buttons, adding an upload progress bar, adding tooltips,
and adding thumbnails for uploaded images. We also show how to create wizard forms
and add multiple forms on one page.
Chapter 5, Adding Ajax Effects. This chapter is an extension of the previous one. Here
we further enhance forms and tables, using various jQuery plugins to make them more
interactive using Ajax.