Updated docs with resourceexample

parent 4e156328
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
Django REST framework Django REST framework
===================== =====================
Introduction
------------
A lightweight REST framework for Django. A lightweight REST framework for Django.
Features: Features:
...@@ -42,60 +45,81 @@ To add django-rest-framework to a django project: ...@@ -42,60 +45,81 @@ To add django-rest-framework to a django project:
* Add ``djangorestframework`` to your ``INSTALLED_APPS``. * Add ``djangorestframework`` to your ``INSTALLED_APPS``.
* Ensure the ``TEMPLATE_LOADERS`` setting contains the item ``'django.template.loaders.app_directories.Loader'``. (It will do by default, so you shouldn't normally need to do anything here.) * Ensure the ``TEMPLATE_LOADERS`` setting contains the item ``'django.template.loaders.app_directories.Loader'``. (It will do by default, so you shouldn't normally need to do anything here.)
Getting Started Getting Started - Resource
--------------- --------------------------
Often you'll want parts of your API to directly map to existing Models. We're going to start off with a simple example, that demonstrates
Typically that might look this looks something like this... a few things:
``models.py`` * Creating resources
* Linking resources
* Writing method handlers on resources
* Adding form validation to resources
First we'll define two resources in our urlconf.
``urls.py``
.. code-block:: python .. include:: ../examples/resourceexample/urls.py
:literal:
Now we'll add a form that we'll use for input validation. This is completely optional, but it's often useful.
from django.db import models ``forms.py``
.. include:: ../examples/resourceexample/forms.py
:literal:
class MyModel(models.Model): Now we'll write our resources. The first is a read only resource that links to three instances of the second. The second resource just has some stub handler methods to help us see that our example is working.
foo = models.BooleanField()
bar = models.IntegerField(help_text='Must be an integer.') ``views.py``
baz = models.CharField(max_length=32, help_text='Free text. Max length 32 chars.')
created = models.DateTimeField(auto_now_add=True) .. include:: ../examples/resourceexample/views.py
:literal:
class Meta:
ordering = ('created',) That's us done.
@models.permalink TODO
def get_absolute_url(self):
return ('simpleexample.views.MyModelResource', (self.pk,))
Getting Started - ModelResource
-------------------------------
Often you'll want parts of your API to directly map to existing django models.
Typically that might look this looks something like this...
``urls.py`` ``urls.py``
.. include:: ../examples/simpleexample/urls.py .. include:: ../examples/modelresourceexample/urls.py
:literal:
``models.py``
.. include:: ../examples/modelresourceexample/models.py
:literal: :literal:
``views.py`` ``views.py``
.. include:: ../examples/simpleexample/views.py .. include:: ../examples/modelresourceexample/views.py
:literal: :literal:
And we're done. We've now got a fully browseable API, which supports multiple input and output media types, and has all the nice automatic field validation that Django gives us for free. And we're done. We've now got a fully browseable API, which supports multiple input and output media types, and has all the nice automatic field validation that Django gives us for free.
We can visit the API in our browser: We can visit the API in our browser:
* http://api.django-rest-framework.org/simple-example/ * http://api.django-rest-framework.org/model-resource-example/
Or access it from the command line using curl: Or access it from the command line using curl:
.. code-block:: bash .. code-block:: bash
bash: curl -X POST -H 'X-Requested-With: XMLHttpRequest' --data 'foo=testing' http://api.django-rest-framework.org/simple-example/ bash: curl -X POST -H 'X-Requested-With: XMLHttpRequest' --data 'foo=true' http://api.django-rest-framework.org/simple-example/
{"detail": {"bar": ["This field is required."], "baz": ["This field is required."]}} {"detail": {"bar": ["This field is required."], "baz": ["This field is required."]}}
bash: curl -X POST -H 'X-Requested-With: XMLHttpRequest' -H 'Content-Type: application/json' --data-binary '{"foo":"testing"}' http://api.django-rest-framework.org/simple-example/ bash: curl -X POST -H 'X-Requested-With: XMLHttpRequest' -H 'Content-Type: application/json' --data-binary '{"foo":true}' http://api.django-rest-framework.org/simple-example/
{"detail": {"bar": ["This field is required."], "baz": ["This field is required."]}} {"detail": {"bar": ["This field is required."], "baz": ["This field is required."]}}
.. note:: We could also have added the handler methods get(), post() etc... seen in the last example, but Django REST framework provides nice default implementations for us that do exactly what we'd expect them to.
TODO: Mention adding custom handler methods, but that the defaults will often do what we want already. Document a Resource example, not tied to models.
Examples Examples
-------- --------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment