An Introduction to Python Web Development Using the Pyramid Framework Part 1
If you have been following my Python articles on InformIT, you should be ready for Python Web development. If you haven't read my previous InformIT articles on Python programming basics and OO concepts, I strongly suggest you do so before continuing with this article. The previous articles are meant as prerequisites for this web development series.
This article will introduce you to the Pyramid Python web development framework and get you started with a simple project. Many Python frameworks are available for facilitating web development, but I found this one quite interesting when comparing it to others like Django and Cherry Pie. Pyramid was one of the first frameworks to be compatible with Python 3, and it's flexible, minimalistic, fast, and reliable.
Pyramid can also be classified as an MVC framework, but doesn't follow this specification completely. Unlike other MVC frameworks, Pyramid doesn't have a "front controller," so to speak, but rather has a resource tree that defines the site structure. The "views" are stored in this resource tree.
Installing Pyramid and Creating Your First Project
Pyramid runs on a variety of platforms; for the purposes of this article, I'll focus on the Windows installation. I'm using Python 3.3, but you can use anything after 2.7 for Pyramid. I should note that all commands are executed using my Python33 python.exe command. This command path should be added to your system path environment variable. If you don't have it already, install the Python interpreter, and then follow these instructions for getting started with Pyramid:
1. Install Python Extensions and choose the correct version for your setup.
2. Download and install the distribute_setup.py. This one is a bit tricky to install; the only way I got it to work was to download the file into my main Python directory, right-click the file, and choose Open to run the script.
3. From your Python33 directory, change to the Scripts subdirectory using the command line. Execute the following command:
easy_install-3.3 virtualenv-3.3
This command installs the virtual environment needed to run a site within its own application pool. Think of it as the infrastructure for running a Python web server.
4. Create the workspace in the virtual environment by executing this command from the Scripts directory:
virtualenv --no-site-packages env
Also run the activate.bat file to wire the shell environment to the virtual environment. The env directory is now your virtual environment directory. Depending on how you installed Python, you might already support a virtual environment. If so, you'll find that the scripts in the env/Scripts directory are already in your Python33/Scripts directory.
5. Time to install the Pyramid dependencies. From the command line of your Python33/Scripts directory, execute easy_install-3.3 pyramid. To install other packages for web applications, such as SQLAlchemy, use the same command sequence.
Be sure to install the paste packages by using easy_install-3.3 paste. paste is a set of utilities for web development with Python. It's basically a web server that can be used to run Python applications.
6. Python now has some site templates, better referred to as scaffolding, that came with the Pyramid installation. You don't have to use one of these, but it's recommended if you're just getting started. From the command line, create the website directory using the starter scaffolding. For my example, I created a project called MyProject in the Python33/Scripts directory by using the pcreate command:
pcreate -s starter MyProject
Once the site project MyProject directory is created, use the command line to switch to the MyProject/Scripts directory, and set up the development environment by using this command:
python setup.py develop
The setup.py file sets up your application for deployment on the web server.
7. Finally, you can try running the site and viewing it in a browser. Execute the following command from the Python33/Scripts directory:
pserve.exe MyProject\development.ini --reload
You should see the following lines:
Starting server in PID 16601. serving on http://0.0.0.0:6543
If you go to the path http://localhost:6543 on your machine, you should see the Pyramid welcome page with your site's project name shown.
Of course, you could change the default port of the server in the development.ini file, which also contains debug settings appropriate for a development environment.
8. If you get syntax errors when running the command in step 7, it's easy to fix. Go to the problem file (it will give you the path) and change the error line to Python 3.3-compatible code. For example, one error you might receive will be on line 634 of the httpexceptions.py file. Open the file in a text editor and replace line 634 with this line:
except HTTPException as exc:
You might have to fix a few more, but the premise is the same. Once the syntax errors are resolved, run the site again and all should be well.
There you have it - eight relatively easy steps for setting up Python and your first scaffolding project with Pyramid. It reminds me a lot of how Ruby is set up on Windows. Getting all the moving parts to work in tandem on Windows can be challenging, but this article should help you get onto the fast track.
If you click around on this sample template web application, you may notice how fast it is. Everything comes up instantly with no lag whatsoever. I can't say the same for Java and .NET, even when accessing the site from the same server.
Conclusion
In this article, you learned the basics of using a Python web development framework called Pyramid. You should now be comfortable with some of the terminology, such as the virtualization environment and how it's used. Setting up Pyramid for Windows should be an easy task, along with creating your first web application using Pyramid's scaffolding. Although we didn't get into details on the mechanics of using Pyramid, Part 2 of this series will address this topic by covering configuration files and custom development using the Pyramid framework.