Apcelent
Posted on September 18, 2018
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.
Posted on September 18, 2018
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.