diff options
| author | James Rutherford | 2015-03-11 10:38:03 +0000 | 
|---|---|---|
| committer | James Rutherford | 2015-03-11 10:38:03 +0000 | 
| commit | 4a2d27975ab5249269aebafd803be87a2107092b (patch) | |
| tree | 55b524c93b02eef404304f734be98871bbb1324f /docs/index.md | |
| parent | 856dc855c952746f566a6a8de263afe951362dfb (diff) | |
| parent | dc56e5a0f41fdd6350e91a5749023d086bd1640f (diff) | |
| download | django-rest-framework-4a2d27975ab5249269aebafd803be87a2107092b.tar.bz2 | |
Merge pull request #1 from tomchristie/master
Merge in from upstream
Diffstat (limited to 'docs/index.md')
| -rw-r--r-- | docs/index.md | 193 | 
1 files changed, 103 insertions, 90 deletions
| diff --git a/docs/index.md b/docs/index.md index 99cd6b88..13f4d0c4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,49 +1,62 @@ -<p class="badges"> +<p class="badges" height=20px>  <iframe src="http://ghbtns.com/github-btn.html?user=tomchristie&repo=django-rest-framework&type=watch&count=true" class="github-star-button" allowtransparency="true" frameborder="0" scrolling="0" width="110px" height="20px"></iframe> -<a href="https://twitter.com/share" class="twitter-share-button" data-url="django-rest-framework.org" data-text="Checking out the totally awesome Django REST framework! http://django-rest-framework.org" data-count="none"></a> +<a href="https://twitter.com/share" class="twitter-share-button" data-url="django-rest-framework.org" data-text="Checking out the totally awesome Django REST framework! http://www.django-rest-framework.org" data-count="none"></a>  <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> -<img src="https://secure.travis-ci.org/tomchristie/django-rest-framework.png?branch=master" class="travis-build-image"> +<img src="https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master" class="travis-build-image">  </p> -# Django REST framework +--- -**Awesome web-browsable Web APIs.** +**Note**: This is the documentation for the **version 3.1** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available. + +For more details see the [3.1 release notes][3.1-announcement]. + +--- + +<p> +<h1 style="position: absolute; +    width: 1px; +    height: 1px; +    padding: 0; +    margin: -1px; +    overflow: hidden; +    clip: rect(0,0,0,0); +    border: 0;">Django REST Framework</h1> + +<img alt="Django REST Framework" title="Logo by Jake 'Sid' Smith" src="img/logo.png" width="600px" style="display: block; margin: 0 auto 0 auto"> +</p>  Django REST framework is a powerful and flexible toolkit that makes it easy to build Web APIs.  Some reasons you might want to use REST framework: -* The [Web browseable API][sandbox] is a huge usability win for your developers. -* [Authentication policies][authentication] including [OAuth1a][oauth1-section] and [OAuth2][oauth2-section] out of the box. +* The [Web browsable API][sandbox] is a huge usability win for your developers. +* [Authentication policies][authentication] including packages for [OAuth1a][oauth1-section] and [OAuth2][oauth2-section].  * [Serialization][serializers] that supports both [ORM][modelserializer-section] and [non-ORM][serializer-section] data sources.  * Customizable all the way down - just use [regular function-based views][functionview-section] if you don't need the [more][generic-views] [powerful][viewsets] [features][routers].  * [Extensive documentation][index], and [great community support][group]. +* Used and trusted by large companies such as [Mozilla][mozilla] and [Eventbrite][eventbrite]. -There is a live example API for testing purposes, [available here][sandbox]. - -**Below**: *Screenshot from the browsable API* +---  ![Screenshot][image] +**Above**: *Screenshot from the browsable API* +  ## Requirements  REST framework requires the following: -* Python (2.6.5+, 2.7, 3.2, 3.3) -* Django (1.3, 1.4, 1.5, 1.6) +* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4) +* Django (1.4.11+, 1.5.6+, 1.6.3+, 1.7, 1.8-beta)  The following packages are optional:  * [Markdown][markdown] (2.1.0+) - Markdown support for the browsable API. -* [PyYAML][yaml] (3.10+) - YAML content-type support. -* [defusedxml][defusedxml] (0.3+) - XML content-type support. -* [django-filter][django-filter] (0.5.4+) - Filtering support. -* [django-oauth-plus][django-oauth-plus] (2.0+) and [oauth2][oauth2] (1.5.211+) - OAuth 1.0a support. -* [django-oauth2-provider][django-oauth2-provider] (0.2.3+) - OAuth 2.0 support. - -**Note**: The `oauth2` Python package is badly misnamed, and actually provides OAuth 1.0a support.  Also note that packages required for both OAuth 1.0a, and OAuth 2.0 are not yet Python 3 compatible. +* [django-filter][django-filter] (0.9.2+) - Filtering support. +* [django-guardian][django-guardian] (1.1.1+) - Object level permissions support.  ## Installation @@ -61,15 +74,15 @@ Add `'rest_framework'` to your `INSTALLED_APPS` setting.      INSTALLED_APPS = (          ... -        'rest_framework',         +        'rest_framework',      )  If you're intending to use the browsable API you'll probably also want to add REST framework's login and logout views.  Add the following to your root `urls.py` file. -    urlpatterns = patterns('', +    urlpatterns = [          ...          url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) -    ) +    ]  Note that the URL path can be whatever you want, but you must include `'rest_framework.urls'` with the `'rest_framework'` namespace. @@ -77,16 +90,11 @@ Note that the URL path can be whatever you want, but you must include `'rest_fra  Let's take a look at a quick example of using REST framework to build a simple model-backed API. -We'll create a read-write API for accessing users and groups. +We'll create a read-write API for accessing information on the users of our project.  Any global settings for a REST framework API are kept in a single configuration dictionary named `REST_FRAMEWORK`.  Start off by adding the following to your `settings.py` module:      REST_FRAMEWORK = { -        # Use hyperlinked styles by default. -        # Only used if the `serializer_class` attribute is not set on a view. -        'DEFAULT_MODEL_SERIALIZER_CLASS': -            'rest_framework.serializers.HyperlinkedModelSerializer', -          # Use Django's standard `django.contrib.auth` permissions,          # or allow read-only access for unauthenticated users.          'DEFAULT_PERMISSION_CLASSES': [ @@ -99,34 +107,37 @@ Don't forget to make sure you've also added `rest_framework` to your `INSTALLED_  We're ready to create our API now.  Here's our project's root `urls.py` module: -    from django.conf.urls.defaults import url, patterns, include -    from django.contrib.auth.models import User, Group -    from rest_framework import viewsets, routers +    from django.conf.urls import url, include +    from django.contrib.auth.models import User +    from rest_framework import routers, serializers, viewsets + +	# Serializers define the API representation. +	class UserSerializer(serializers.HyperlinkedModelSerializer): +	    class Meta: +	        model = User +	        fields = ('url', 'username', 'email', 'is_staff')      # ViewSets define the view behavior.      class UserViewSet(viewsets.ModelViewSet): -        model = User +        queryset = User.objects.all() +        serializer_class = UserSerializer -    class GroupViewSet(viewsets.ModelViewSet): -        model = Group - -     -    # Routers provide an easy way of automatically determining the URL conf +    # Routers provide an easy way of automatically determining the URL conf.      router = routers.DefaultRouter()      router.register(r'users', UserViewSet) -    router.register(r'groups', GroupViewSet) -      # Wire up our API using automatic URL routing. -    # Additionally, we include login URLs for the browseable API. -    urlpatterns = patterns('', +    # Additionally, we include login URLs for the browsable API. +    urlpatterns = [          url(r'^', include(router.urls)),          url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) -    ) +    ] + +You can now open the API in your browser at [http://127.0.0.1:8000/](http://127.0.0.1:8000/), and view your new 'users' API. If you use the login control in the top right corner you'll also be able to add, create and delete users from the system.  ## Quickstart -Can't wait to get started?  The [quickstart guide][quickstart] is the fastest way to get up and running, and building APIs with REST framework. +Can't wait to get started? The [quickstart guide][quickstart] is the fastest way to get up and running, and building APIs with REST framework.  ## Tutorial @@ -139,6 +150,8 @@ The tutorial will walk you through the building blocks that make up REST framewo  * [5 - Relationships & hyperlinked APIs][tut-5]  * [6 - Viewsets & routers][tut-6] +There is a live example API of the finished tutorial API for testing purposes, [available here][sandbox]. +  ## API Guide  The API guide is your complete reference manual to all the functionality provided by REST framework. @@ -154,16 +167,20 @@ The API guide is your complete reference manual to all the functionality provide  * [Serializers][serializers]  * [Serializer fields][fields]  * [Serializer relations][relations] +* [Validators][validators]  * [Authentication][authentication]  * [Permissions][permissions]  * [Throttling][throttling]  * [Filtering][filtering]  * [Pagination][pagination] +* [Versioning][versioning]  * [Content negotiation][contentnegotiation] +* [Metadata][metadata]  * [Format suffixes][formatsuffixes]  * [Returning URLs][reverse]  * [Exceptions][exceptions]  * [Status codes][status] +* [Testing][testing]  * [Settings][settings]  ## Topics @@ -175,31 +192,23 @@ General guides to using REST framework.  * [Browser enhancements][browser-enhancements]  * [The Browsable API][browsableapi]  * [REST, Hypermedia & HATEOAS][rest-hypermedia-hateoas] -* [2.0 Announcement][rest-framework-2-announcement] -* [2.2 Announcement][2.2-announcement] -* [2.3 Announcement][2.3-announcement] +* [Third Party Resources][third-party-resources] +* [Contributing to REST framework][contributing] +* [Project management][project-management] +* [3.0 Announcement][3.0-announcement] +* [3.1 Announcement][3.1-announcement] +* [Kickstarter Announcement][kickstarter-announcement]  * [Release Notes][release-notes] -* [Credits][credits]  ## Development -If you want to work on REST framework itself, clone the repository, then... - -Build the docs: - -    ./mkdocs.py - -Run the tests: - -    ./rest_framework/runtests/runtests.py - -To run the tests against all supported configurations, first install [the tox testing tool][tox] globally, using `pip install tox`, then simply run `tox`:  - -    tox +See the [Contribution guidelines][contributing] for information on how to clone +the repository, run the test suite and contribute changes back to REST +Framework.  ## Support -For support please see the [REST framework discussion group][group], try the  `#restframework` channel on `irc.freenode.net`, or raise a  question on [Stack Overflow][stack-overflow], making sure to include the ['django-rest-framework'][django-rest-framework-tag] tag. +For support please see the [REST framework discussion group][group], try the  `#restframework` channel on `irc.freenode.net`, search [the IRC archives][botbot], or raise a  question on [Stack Overflow][stack-overflow], making sure to include the ['django-rest-framework'][django-rest-framework-tag] tag.  [Paid support is available][paid-support] from [DabApps][dabapps], and can include work on REST framework core, or support with building your REST framework API.  Please [contact DabApps][contact-dabapps] if you'd like to discuss commercial support options. @@ -216,47 +225,44 @@ Send a description of the issue via email to [rest-framework-security@googlegrou  ## License -Copyright (c) 2011-2013, Tom Christie +Copyright (c) 2011-2015, Tom Christie  All rights reserved. -Redistribution and use in source and binary forms, with or without  +Redistribution and use in source and binary forms, with or without  modification, are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this  +Redistributions of source code must retain the above copyright notice, this  list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this  -list of conditions and the following disclaimer in the documentation and/or  +Redistributions in binary form must reproduce the above copyright notice, this +list of conditions and the following disclaimer in the documentation and/or  other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND  -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED  -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE  -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE  -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR  -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER  -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,  -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  [travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master  [travis-build-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.png?branch=master -[urlobject]: https://github.com/zacharyvoase/urlobject +[mozilla]: http://www.mozilla.org/en-US/about/ +[eventbrite]: https://www.eventbrite.co.uk/about/  [markdown]: http://pypi.python.org/pypi/Markdown/ -[yaml]: http://pypi.python.org/pypi/PyYAML -[defusedxml]: https://pypi.python.org/pypi/defusedxml  [django-filter]: http://pypi.python.org/pypi/django-filter -[oauth2]: https://github.com/simplegeo/python-oauth2 -[django-oauth-plus]: https://bitbucket.org/david/django-oauth-plus/wiki/Home -[django-oauth2-provider]: https://github.com/caffeinehit/django-oauth2-provider +[django-guardian]: https://github.com/lukaszb/django-guardian  [0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X  [image]: img/quickstart.png  [index]: . -[oauth1-section]: api-guide/authentication.html#oauthauthentication -[oauth2-section]: api-guide/authentication.html#oauth2authentication -[serializer-section]: api-guide/serializers.html#serializers -[modelserializer-section]: api-guide/serializers.html#modelserializer -[functionview-section]: api-guide/views.html#function-based-views +[oauth1-section]: api-guide/authentication/#django-rest-framework-oauth +[oauth2-section]: api-guide/authentication/#django-oauth-toolkit +[serializer-section]: api-guide/serializers#serializers +[modelserializer-section]: api-guide/serializers#modelserializer +[functionview-section]: api-guide/views#function-based-views  [sandbox]: http://restframework.herokuapp.com/  [quickstart]: tutorial/quickstart.md @@ -278,33 +284,40 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  [serializers]: api-guide/serializers.md  [fields]: api-guide/fields.md  [relations]: api-guide/relations.md +[validators]: api-guide/validators.md  [authentication]: api-guide/authentication.md  [permissions]: api-guide/permissions.md  [throttling]: api-guide/throttling.md  [filtering]: api-guide/filtering.md  [pagination]: api-guide/pagination.md +[versioning]: api-guide/versioning.md  [contentnegotiation]: api-guide/content-negotiation.md +[metadata]: api-guide/metadata.md  [formatsuffixes]: api-guide/format-suffixes.md  [reverse]: api-guide/reverse.md  [exceptions]: api-guide/exceptions.md  [status]: api-guide/status-codes.md +[testing]: api-guide/testing.md  [settings]: api-guide/settings.md  [documenting-your-api]: topics/documenting-your-api.md +[internationalization]: topics/documenting-your-api.md  [ajax-csrf-cors]: topics/ajax-csrf-cors.md  [browser-enhancements]: topics/browser-enhancements.md  [browsableapi]: topics/browsable-api.md  [rest-hypermedia-hateoas]: topics/rest-hypermedia-hateoas.md  [contributing]: topics/contributing.md -[rest-framework-2-announcement]: topics/rest-framework-2-announcement.md -[2.2-announcement]: topics/2.2-announcement.md -[2.3-announcement]: topics/2.3-announcement.md +[project-management]: topics/project-management.md +[third-party-resources]: topics/third-party-resources.md +[3.0-announcement]: topics/3.0-announcement.md +[3.1-announcement]: topics/3.1-announcement.md +[kickstarter-announcement]: topics/kickstarter-announcement.md  [release-notes]: topics/release-notes.md -[credits]: topics/credits.md  [tox]: http://testrun.org/tox/latest/  [group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework +[botbot]: https://botbot.me/freenode/restframework/  [stack-overflow]: http://stackoverflow.com/  [django-rest-framework-tag]: http://stackoverflow.com/questions/tagged/django-rest-framework  [django-tag]: http://stackoverflow.com/questions/tagged/django | 
