Pyramid is a lightweight python web framework following MVC architectural pattern. In this article, we will set up a web application and API using Pyramid.
Pyramid is a suitable framework for large scale MVC applications and it comes with flexible bootstrapping tools.
Cornice, a library from Mozilla, makes it easy to develop RESTful web services with pyramid.
Installation
First we create a virtual environment which helps us in separating project specific python packages installations from other projects. After activating the virtual environment, we install pyramid framework using command:
pip install pyramid
Create models
We create a models.py
file with a class Note which maps to the data table storing all the values of notes.
# pyramidapp/models.py
class Note(Base):
__tablename__ = 'Note'
id = Column(Integer, primary_key=True)
title = Column(Text)
description = Column(Text)
create_at = Column(Text)
create_by = Column(Text)
priority = Column(Integer)
def __init__(self, title, description, create_at ,create_by, priority):
self.title = title
self.description = description
self.create_at = create_at
self.create_by = create_by
self.priority = priority
@classmethod
def from_json(cls, data):
return cls(**data)
def to_json(self):
to_serialize = ['id', 'title', 'description', 'create_at', 'create_by', 'priority']
d = {}
for attr_name in to_serialize:
d[attr_name] = getattr(self, attr_name)
return d
Views
In views.py
file, we add our services for different API requests.
@resource(collection_path='/notes', path='/notes/{id}')
class NoteView(object):
def __init__(self, request):
self.request = request
def collection_get(self):
return {
'notes': [
{'id': note.id, 'title': note.title, 'description': note.description,
'create_at': note.create_at, 'create_by': note.create_by, 'priority': note.priority}
for note in DBSession.query(Note)
]
}
def get(self):
try:
return DBSession.query(Note).get(
int(self.request.matchdict['id'])).to_json()
except:
return {}
def collection_post(self):
note = self.request.json
DBSession.add(Note.from_json(note))
def put(self):
try:
obj=DBSession.query(Note).filter(Note.id==self.request.matchdict['id'])
obj.update(self.request.json)
return {'notes': [
{'id': note.id, 'title': note.title, 'description': note.description,
'create_at': note.create_at, 'create_by': note.create_by, 'priority': note.priority}
for note in DBSession.query(Note)
]
}
except:
return {'result': 'No object found'}
def delete(self):
obj=DBSession.query(Note).filter(Note.id==self.request.matchdict['id']).first()
DBSession.delete(obj)
return {'notes': [
{'id': note.id, 'title': note.title, 'description': note.description,
'create_at': note.create_at, 'create_by': note.create_by, 'priority': note.priority}
for note in DBSession.query(Note)
]
}
Running the application
Create the database schema by executing:
python initialize_db.py
Start the development server by:
python setup.py develop
pserve note.ini --reload
We can view the notes by navigating to the URL http://localhost:6543/notes in browser.
Open python shell and execute requests for API:
requests.post('http://localhost:6543/notes',
headers={'Content-Type': 'application/json'},
data=json.dumps({ "title": "sample note one ",
"create_at": "2017-08-23 00:00",
"create_by": "apcelent",
"description": "sample notes",
"priority": 3,
}))
requests.put('http://localhost:6543/notes/1',
headers={'Content-Type': 'application/json'},
data=json.dumps({ "title": "sample note edit ",
"create_at": "2017-08-23 00:00",
"create_by": "apcelent",
"description": "sample notes edit",
"priority": 4,
}))
requests.delete('http://localhost:6543/notes/1')
The source code can be found on github
Hope the article was of help!
The article originally appeared on Apcelent Tech Blog.
Top comments (0)