109 lines
2.9 KiB
ReStructuredText
109 lines
2.9 KiB
ReStructuredText
Full example
|
|
============
|
|
|
|
Here is a full example of a `TodoMVC <https://todomvc.com/>`_ API.
|
|
|
|
.. code-block:: python
|
|
|
|
from flask import Flask
|
|
from flask_restx import Api, Resource, fields
|
|
from werkzeug.middleware.proxy_fix import ProxyFix
|
|
|
|
app = Flask(__name__)
|
|
app.wsgi_app = ProxyFix(app.wsgi_app)
|
|
api = Api(app, version='1.0', title='TodoMVC API',
|
|
description='A simple TodoMVC API',
|
|
)
|
|
|
|
ns = api.namespace('todos', description='TODO operations')
|
|
|
|
todo = api.model('Todo', {
|
|
'id': fields.Integer(readonly=True, description='The task unique identifier'),
|
|
'task': fields.String(required=True, description='The task details')
|
|
})
|
|
|
|
|
|
class TodoDAO(object):
|
|
def __init__(self):
|
|
self.counter = 0
|
|
self.todos = []
|
|
|
|
def get(self, id):
|
|
for todo in self.todos:
|
|
if todo['id'] == id:
|
|
return todo
|
|
api.abort(404, "Todo {} doesn't exist".format(id))
|
|
|
|
def create(self, data):
|
|
todo = data
|
|
todo['id'] = self.counter = self.counter + 1
|
|
self.todos.append(todo)
|
|
return todo
|
|
|
|
def update(self, id, data):
|
|
todo = self.get(id)
|
|
todo.update(data)
|
|
return todo
|
|
|
|
def delete(self, id):
|
|
todo = self.get(id)
|
|
self.todos.remove(todo)
|
|
|
|
|
|
DAO = TodoDAO()
|
|
DAO.create({'task': 'Build an API'})
|
|
DAO.create({'task': '?????'})
|
|
DAO.create({'task': 'profit!'})
|
|
|
|
|
|
@ns.route('/')
|
|
class TodoList(Resource):
|
|
'''Shows a list of all todos, and lets you POST to add new tasks'''
|
|
@ns.doc('list_todos')
|
|
@ns.marshal_list_with(todo)
|
|
def get(self):
|
|
'''List all tasks'''
|
|
return DAO.todos
|
|
|
|
@ns.doc('create_todo')
|
|
@ns.expect(todo)
|
|
@ns.marshal_with(todo, code=201)
|
|
def post(self):
|
|
'''Create a new task'''
|
|
return DAO.create(api.payload), 201
|
|
|
|
|
|
@ns.route('/<int:id>')
|
|
@ns.response(404, 'Todo not found')
|
|
@ns.param('id', 'The task identifier')
|
|
class Todo(Resource):
|
|
'''Show a single todo item and lets you delete them'''
|
|
@ns.doc('get_todo')
|
|
@ns.marshal_with(todo)
|
|
def get(self, id):
|
|
'''Fetch a given resource'''
|
|
return DAO.get(id)
|
|
|
|
@ns.doc('delete_todo')
|
|
@ns.response(204, 'Todo deleted')
|
|
def delete(self, id):
|
|
'''Delete a task given its identifier'''
|
|
DAO.delete(id)
|
|
return '', 204
|
|
|
|
@ns.expect(todo)
|
|
@ns.marshal_with(todo)
|
|
def put(self, id):
|
|
'''Update a task given its identifier'''
|
|
return DAO.update(id, api.payload)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True)
|
|
|
|
|
|
|
|
You can find other examples in the `github repository examples folder`_.
|
|
|
|
.. _github repository examples folder: https://github.com/python-restx/flask-restx/tree/master/examples
|