An open API service indexing awesome lists of open source software.

https://github.com/waro163/flask-restframework

flask restframework, inspired by Django-rest-framework
https://github.com/waro163/flask-restframework

flask restframework

Last synced: 11 months ago
JSON representation

flask restframework, inspired by Django-rest-framework

Awesome Lists containing this project

README

          

# Installation

pip install flask-rest-framework

# Test

py.test .

# Overview
flask-rest-framework is inspired by [Django REST framework](https://github.com/encode/django-rest-framework)

You can use this extension to develop your rest api quickly based on flask, each view contains this:

* Authentication policies
* Permission
* Throttle

and each of them can be customized yourself, all of those are revolved around `User`, so you can define your own
User class.

# Example

```python
from flask import Flask,jsonify
from flask_restframework import RestFramework

app = Flask(__name__)
rf = RestFramework()
rf.init_app(app)

from flask_restframework.views import APIView
from flask_restframework.authentication import BasicAuthentication,JWTAuthentication
from flask_restframework.permissions import AllowAny,IsAuthenticated

class PingView(APIView):

authentication_classes=[BasicAuthentication, JWTAuthentication]
permission_classes=[IsAuthenticated,]

def get(self, *args, **kwargs):
return jsonify({"args":args,"kwargs":kwargs,"request.args":request.args})

app.add_url_rule("/ping/",view_func=PingView.as_view('ping'))

if __name__ == "__main__":
app.run()
```

# User

if you define your own `User` class, must configure it in flask config env: `FLASK_RESTFRAMEWORK_USER_CLASS`

```python
app.config['FLASK_RESTFRAMEWORK_USER_CLASS] = 'your_user_class_path.YourUser'
```

and `User` class must has `is_authenticated` attribute, the type is boolean, this attribute will be used in permission.

more detail can see `flask_restframework.user.BaseUser`, i recomend your class inherit from it.

we use the `User` in authentication

# Authenticaion

we offer `BasicAuthentication` and `JWTAuthentication` authentication class here, you could custom your authentication class or inherit them to complete auth

# Permission

`AllowAny` permission class allows anyone access your API without authentication;

`IsAuthenticated` user must be authenticated before accessing API;

`IsAuthenticatedOrReadOnly` allow anyone access API if request method is safe('get','head','options'), else must be authenticated.

# Throttling

before using throttle, we must configure cache to app, else it will not work:
```
from xxx import Cache
...
app = Flask(__name__)
cache = Cache()
rf = RestFramework()
rf.init_app(app,cache)
...
```
here we offer `AnonRateThrottle` and `UserRateThrottle`.

and the rate of throttling can be set by `second`,`minute`,`hour`,`day`.

```
...
class YourView(APIView):
authentication_classes=[BasicAuthentication, JWTAuthentication]
throttle_handlers = [{"class":AnonRateThrottle,"rate":"1/hour"},{"class":UserRateThrottle,"rate":"10/minute"}]
...
```

### AnonRateThrottle

the `AnonRateThrottle` is for throttling anonymous user, namely permission class is `AllowAny`, if user is authenticated, it will not limit.

### UserRateThrottle

the `UserRateThrottle` is for throttling authenticated user, if user is not authenticated, it also work.