Skip to main content

Web APIs for Flask, made easy, inspired from Django DRF.

Project description

# Django Rest Framework analog for Flask+Mongoengine

[![Build Status](https://travis-ci.org/sallyruthstruik/flask_restframework.svg?branch=master)](https://travis-ci.org/sallyruthstruik/flask_restframework)
[![codecov](https://codecov.io/gh/sallyruthstruik/flask_restframework/branch/master/graph/badge.svg)](https://codecov.io/gh/sallyruthstruik/flask_restframework)
[![PyPI version](https://badge.fury.io/py/flask_restframework.svg)](https://badge.fury.io/py/flask_restframework)

Minimalistic and usage-easy RESTful framework for Flask. Like Django Rest Framework for Flask

This project allows you to write serializers/model serializers and REST resources easily.
This project interface was inspired by Django-rest-framework (https://github.com/tomchristie/django-rest-framework)


## Installation

For installation run:
`pip install flask_restframework`

## ToDo app example

Full code you can find in examples/todo.py

Shows functionality of using:

* ModelSerializer
* ModelResource
* Filtering

Firstly, create Flask app and MongoEngine binding:

```python
from flask.app import Flask
from flask.ext.mongoengine import MongoEngine

app = Flask(__name__)

db = MongoEngine(app, config={
"MONGODB_DB": "todo"
})
```

Next, we create 2 models - ToDo represents one todo item and todoList.
Each todoList can contain several ToDo items:

```python
from mongoengine import fields as dbfields

class ToDo(dbfields.EmbeddedDocument):
title = dbfields.StringField(required=True)
body = dbfields.StringField(required=True)
is_done = dbfields.BooleanField(default=False)


class ToDoList(dbfields.Document):
title = dbfields.StringField(required=True)

# Use embedded field for todos. You can also use ReferenceField
todos = dbfields.EmbeddedDocumentListField(ToDo)
```

### Serializers

For serializing outcoming and parsing incoming data serializers are used.
The simplest way to create serializer for model is to use ModelSerializer:

```python
from flask_restframework import fields, BaseSerializer, ModelSerializer

class ToDoListSerializer(ModelSerializer):
class Meta:
model = ToDoList
```

By default it will serialize all fields of model.
You can manage fields you want to serialize in:

* Meta.fields
* Meta.exclude_fields
* Meta.readonly_fields

### Resources

The last step is to create resources and bind them to app:
```python

class ToDoListResource(ModelResource):
queryset = ToDoList.objects.all()
serializer_class = ToDoListSerializer

```

Register resource with router and start the app:

```python

router = DefaultRouter(app)
router.register("/todolist", ToDoListResource, "todolist")

if __name__ == "__main__":
app.run(port=3000)

```


### Server query examples

First, let's create new todolist with bad body:
```
POST /todolist
{}

Response:
{
"title": [
"Field is required"
]
}
```

Create normal todo:
```
POST /todolist
{
"title": "Main list",
"todos": [{
"title": "TodoSample",
"body": "Do something"
}]
}

Response:
{
"id": "59370a0c32105b538798e200",
"title": "Main list",
"todos": [
{
"body": "Do something",
"is_done": false,
"title": "TodoSample"
}
]
}
```

Update todo, set is_done:
```
PUT /todolist/59370a0c32105b538798e200
{
"title": "Main list",
"todos": [{
"title": "TodoSample",
"body": "Do something",
"is_done": true
}]
}

Response:
{
"id": "59370a0c32105b538798e200",
"title": "Main list",
"todos": [
{
"body": "Do something",
"is_done": true,
"title": "TodoSample"
}
]
}
```

## More functionality


Let's add bit more functionality:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_restframework-0.2.1.tar.gz (3.3 MB view details)

Uploaded Source

File details

Details for the file flask_restframework-0.2.1.tar.gz.

File metadata

File hashes

Hashes for flask_restframework-0.2.1.tar.gz
Algorithm Hash digest
SHA256 9cbde51bbeeb07f35d8cfc43cfc546502cd997971422a8f146d17041da0a704e
MD5 9d00a4c2fee59a15d460e9924ae11453
BLAKE2b-256 f55703b07941ce71bdaa56175a5eb00c8a1f294fedd910e18375f89e0b2859e5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page