Skip to main content

RESTIT.. a REST framework for DJANGO

Quick Steps

  1. Install framework

  2. Add "restit" to DJANGO apps.

  3. Add "middleware"

    'rest.middleware.SessionMiddleware', 'rest.middleware.GlobalRequestMiddleware', 'rest.middleware.CorsMiddleware',

  4. add url(r'^rpc/', include('rest.urls')) to your urlpatterns in urls.py

Quick Overview

This framework makes it easy to build a rest framework to use with any web or applicaiton development.

You can take any model and turn them into a REST Model by inheriting from RestModel.

class ExampleTODO(models.Model, RestModel):
    your standard django fields
  ...

Next in your DJANGO app create a "rpc.py" file.

# decorator that defines your routes, note the app_name is assumed
@rd.url('todo')
@rd.url('todo/<int:pk>')
@login_required
def on_rest_todo(request, pk=None):
    return ExampleTODO.on_rest_request(request, pk)

This will give you a full rest interface into your Django model.

But wait there's more...

This framework is pretty powerful and allow you to define how you want to return your model objects, and how deep!

class ExampleTODO(models.Model, RestModel):
    class RestMeta:
        GRAPHS = {
            "default": {
        "exclude":["priority"],
                "graphs":{
                    "user":"default"
                }
            },
            "list": {
        "fields":["id", "name", "priority"]
            }
        }
    user = models.ForeignKey(User, related_name="+")
  name = models.CharField(max_length=80)
  description = models.TextField(max_length=80)
  priority = models.IntegerField(default=0)

Above you can we we can define "graphs" that let us control what is returned.

So if we go to http://localhost:8000/rpc/rest_example/todo it will default to the "list" graph and return something that looks like...

{
    "status": true,
    "size": 25,
    "count": 2,
    "data": [
        {
            "id": 1,
            "name": "test 1",
            "priority": 1,
      "user": 21
        },
        {
            "id": 2,
            "name": "test 2",
            "priority": 1,
      "user": 21
        },
    ]
}

So if we go to http://localhost:8000/rpc/rest_example/todo?graph=default

{
    "status": true,
    "size": 25,
    "count": 2,
    "data": [
        {
            "id": 1,
            "name": "test 1",
            "description": "this is test 1",
      "user": {
        "id": 21,
        "username": "jsmith",
        "display_name": "TEST USER 5",
        "avatar": "http://localhost:8000/media/ax1fg.png"
      }
        },
        {
            "id": 2,
            "name": "test 2",
            "description": "this is test 2",
      "user": {
        "id": 21,
        "username": "jsmith",
        "display_name": "TEST USER 5",
        "avatar": "http://localhost:8000/media/ax1fg.png"
      }
        },
    ]
}

More details...

RestModel

The RestModel Class is a helper class that helps existing models adapt to the REST framework. It is not required but highly recommended.

API helpers

Key methods you can override

    def on_rest_get(self, request):
        # override the get method
        return self.restGet(request, graph)

    def on_rest_post(self, request):
        # override the post method
        return self.restGet(request, graph) 
    
    def on_rest_pre_save(self, request):
        # called before instance saved via rest, no return
        pass
        
    def on_rest_created(self, request):
        # called after new instance created via rest, no return
        pass

    def on_rest_saved(self, request):
        # called after old instance saved via rest, no return
        pass

    def on_rest_delete(self, request):
        can_delete = getattr(self.RestMeta, "CAN_DELETE", False)
        if not can_delete:
            return self.restStatus(request, False, error="deletion not allowed via rest for this model.")
        self.delete()
        return GRAPH_HELPERS.restStatus(request, True)

    @classmethod
    def onRestCanSave(cls, request):
        # override to validate permissions or anything if this can create or save this instance
        return True
        
    @classmethod
    def on_rest_list_filter(cls, request, qset):
        # override on do any pre filters, returns new qset
        # qset = qset.filter(id__gt=50)
        return qset
        
    @classmethod
    def on_rest_list(cls, request, qset=None):
        # normally you would override on_rest_list_filter, but you could override this
        return cls.restList(request, qset)
    
    @classmethod
    def on_rest_create(cls, request, pk=None):
        obj = cls.createFromRequest(request)
        return obj.restGet(request)

Creating and Saving

createFromRequest(request, **kwargs) - this allows you to pass a request object (normally a post) and create a new model from that request. You can also pass in any override fields after the request.

    MyModel.createFromRequest(request, owner=request.user)

saveFromRequest(request, **kwargs) - this allows you to pass a request object (normally a post) and save data to the model from that request. You can also pass in any override fields after the request.

    mode_instance.saveFromRequest(request, modified_by=request.user)

Other Helper Methods

getFromRequest(cls, model_name) - @classmethod - attempts to get the model instance from a request, check for the classname and classname+ "_id" in the REQUEST params.

restGetModel(app_name, model_name) - @staticmethod - grab Model class by app and model name.

restGetGenericModel(self, fieldname) - grab Model class by app and model name.

restGetGenericRelation(self, fieldname) - grab Model class by app and model name.

Returning JSON Graph

Graphs can easily be built automatically from your models by setting the appropriate RestMeta properties.

getGraph(name) - @classmethod - Specify the name of the graph you want to return.

RestMeta

This is a Property class you add to your models to define your graphs.

By default a graph will return just the fields with no recurse into of Foreign models.

Release files for django-restit 4.2.183

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-restit 4.2.183
File Size Uploaded
django_restit-4.2.183.tar.gz 810.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-restit 4.2.183
File Interpreter ABI Platform
django_restit-4.2.183-py3-none-any.whl Python 3 none any Details

Total release size: 1.8 MB

Release files / django_restit-4.2.183.tar.gz

Download URL django_restit-4.2.183.tar.gz
Size 810.5 kB
Tags Source
SHA-256 checksum
How to use checksums
af308c55cd94cb000061fb48c244137b648b221905544d0f5e2ea1e7976e113b
BLAKE2b-256 checksum
How to use checksums
875d52b43cd58dd4fd8f457c92ba26c8d40650024bee29ed040837856b03c45a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.0.1 CPython/3.10.16 Darwin/24.6.0

Release files / django_restit-4.2.183-py3-none-any.whl

Download URL django_restit-4.2.183-py3-none-any.whl
Size 1.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
b4e54b9a7d7c46a59563c1ea754d0639a7f849331008cd539a3dfa4f98e9b44f
BLAKE2b-256 checksum
How to use checksums
38a9f2285be9705c247a3d4cb11986fe8b98dcceb087e4a60c84e7ec5dc735e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.0.1 CPython/3.10.16 Darwin/24.6.0

Release history Release notifications | RSS feed

This release

4.2.183 This release

2 release files

4.2.99

2 release files

4.2.98

2 release files

4.2.97

2 release files

4.2.96

2 release files

4.2.95

2 release files

4.2.94

2 release files

4.2.91

2 release files

4.2.90

2 release files

4.2.89

2 release files

4.2.88

2 release files

4.2.87

2 release files

4.2.86

2 release files

4.2.85

2 release files

4.2.84

2 release files

4.2.83

2 release files

4.2.82

2 release files

4.2.81

2 release files

4.2.80

2 release files

4.2.79

2 release files

4.2.78

2 release files

4.2.77

2 release files

4.2.76

2 release files

4.2.75

2 release files

4.2.74

2 release files

4.2.73

2 release files

4.2.69

2 release files

4.2.68

2 release files

4.2.66

2 release files

4.2.65

2 release files

4.2.64

2 release files

4.2.63

2 release files

4.2.62

2 release files

4.2.61

2 release files

4.2.60

2 release files

4.2.59

2 release files

4.2.58

2 release files

4.2.57

2 release files

4.2.56

2 release files

4.2.46

2 release files

4.2.45

2 release files

4.2.44

2 release files

4.2.43

2 release files

4.2.38

2 release files

4.2.37

2 release files

4.2.36

2 release files

4.2.35

2 release files

4.2.34

2 release files

4.2.33

2 release files

4.2.32

2 release files

4.2.31

2 release files

4.2.30

2 release files

4.2.29

2 release files

4.2.28

2 release files

4.2.27

2 release files

4.2.26

2 release files

4.2.25

2 release files

4.2.16

2 release files

4.2.15

2 release files

4.2.14

2 release files

4.2.13

2 release files

4.2.12

2 release files

4.2.11

2 release files

4.2.10

2 release files

4.2.9

2 release files

4.2.8

2 release files

4.2.7

2 release files

4.2.6

2 release files

4.2.5

2 release files

4.2.4

2 release files

4.2.3

2 release files

4.2.2

2 release files

4.2.1

2 release files

4.1.89

2 release files

4.1.88

2 release files

4.1.87

2 release files

4.1.86

2 release files

4.1.85

2 release files

4.1.84

2 release files

4.1.83

2 release files

4.1.82

2 release files

4.1.75

2 release files

4.1.74

2 release files

4.1.73

2 release files

4.1.72

2 release files

4.1.71

2 release files

4.1.70

2 release files

4.1.69

2 release files

4.1.68

2 release files

4.1.67

2 release files

4.1.66

2 release files

4.1.65

2 release files

4.1.64

2 release files

4.1.63

2 release files

4.1.62

2 release files

4.1.61

2 release files

4.1.60

2 release files

4.1.59

2 release files

4.1.58

2 release files

4.1.57

2 release files

4.1.56

2 release files

4.1.55

2 release files

4.1.54

2 release files

4.1.53

2 release files

4.1.52

2 release files

4.1.51

2 release files

4.1.50

2 release files

4.1.49

2 release files

4.1.48

2 release files

4.1.47

2 release files

4.1.42

2 release files

4.1.41

2 release files

4.1.40

2 release files

4.1.36

2 release files

4.1.33

2 release files

4.1.32

2 release files

4.1.31

2 release files

4.1.30

2 release files

4.1.29

2 release files

4.1.28

2 release files

4.1.27

2 release files

4.1.26

2 release files

4.1.25

2 release files

4.1.24

2 release files

4.1.15

2 release files

4.1.14

2 release files

4.1.13

2 release files

4.1.12

2 release files

4.1.11

2 release files

4.1.10

2 release files

4.1.9

2 release files

4.1.8

2 release files

4.1.7

2 release files

4.1.6

2 release files

4.1.5

2 release files

4.1.4

2 release files

4.1.3

2 release files

4.1.2

2 release files

4.1.1

2 release files

4.0.13

2 release files

4.0.9

2 release files

4.0.8

2 release files

4.0.7

2 release files

4.0.6

2 release files

4.0.5

2 release files

4.0.4

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page