What's the simplest way to get started in Pyramid? A single-file module. No Python packages, no setup.py, no other machinery.
Microframeworks are all the rage these days. "Microframework" is a marketing term, not a technical one. They have a low mental overhead: they do so little, the only things you have to worry about are your things.
Pyramid is special because it can act as a single-file module microframework. You can have a single Python file that can be executed directly by Python. But Pyramid also provides facilities to scale to the largest of applications.
Python has a standard called WSGI that defines how Python web applications plug into standard servers, getting passed incoming requests and returning responses. Most modern Python web frameworks obey an "MVC" (model-view-controller) application pattern, where the data in the model has a view that mediates interaction with outside systems.
In this step we'll see a brief glimpse of WSGI servers, WSGI applications, requests, responses, and views.
Make sure you have followed the steps in Requirements.
Starting from your workspace directory (~/projects/quick_tutorial), create a directory for this step:
$ mkdir hello_world; cd hello_world
Copy the following into hello_world/app.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.response import Response def hello_world(request): print('Incoming request') return Response('<body><h1>Hello World!</h1></body>') if __name__ == '__main__': config = Configurator() config.add_route('hello', '/') config.add_view(hello_world, route_name='hello') app = config.make_wsgi_app() server = make_server('0.0.0.0', 6543, app) server.serve_forever()
Run the application:
$ $VENV/bin/python app.py
Open http://localhost:6543/ in your browser.
New to Python web programming? If so, some lines in module merit explanation:
As shown in this example, the configurator plays a central role in Pyramid development. Building an application from loosely-coupled parts via Application Configuration is a central idea in Pyramid, one that we will revisit regularly in this Quick Tour.
Why do we do this:
print 'Incoming request'
What happens if you return a string of HTML? A sequence of integers?
Put something invalid, such as print xyz, in the view function. Kill your python app.py with cntrl-c and restart, then reload your browser. See the exception in the console?
The GI in WSGI stands for "Gateway Interface". What web standard is this modelled after?