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
- Host: GitHub
- URL: https://github.com/waro163/flask-restframework
- Owner: waro163
- Created: 2021-08-15T01:48:32.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-01-02T07:44:53.000Z (about 4 years ago)
- Last Synced: 2025-02-06T07:47:19.059Z (about 1 year ago)
- Topics: flask, restframework
- Language: Python
- Homepage:
- Size: 51.8 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
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.