mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-26 05:31:07 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			227 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			227 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # [Django REST framework][docs]
 | |
| 
 | |
| [![build-status-image]][build-status]
 | |
| [![coverage-status-image]][codecov]
 | |
| [![pypi-version]][pypi]
 | |
| 
 | |
| **Awesome web-browsable Web APIs.**
 | |
| 
 | |
| Full documentation for the project is available at [https://www.django-rest-framework.org/][docs].
 | |
| 
 | |
| ---
 | |
| 
 | |
| # Funding
 | |
| 
 | |
| REST framework is a *collaboratively funded project*. If you use
 | |
| REST framework commercially we strongly encourage you to invest in its
 | |
| continued development by [signing up for a paid plan][funding].
 | |
| 
 | |
| The initial aim is to provide a single full-time position on REST framework.
 | |
| *Every single sign-up makes a significant impact towards making that possible.*
 | |
| 
 | |
| [![][sentry-img]][sentry-url]
 | |
| [![][stream-img]][stream-url]
 | |
| [![][spacinov-img]][spacinov-url]
 | |
| [![][retool-img]][retool-url]
 | |
| [![][bitio-img]][bitio-url]
 | |
| [![][posthog-img]][posthog-url]
 | |
| [![][cryptapi-img]][cryptapi-url]
 | |
| [![][fezto-img]][fezto-url]
 | |
| [![][svix-img]][svix-url]
 | |
| [![][zuplo-img]][zuplo-url]
 | |
| 
 | |
| Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry][sentry-url], [Stream][stream-url], [Spacinov][spacinov-url], [Retool][retool-url], [bit.io][bitio-url], [PostHog][posthog-url], [CryptAPI][cryptapi-url], [FEZTO][fezto-url], [Svix][svix-url], and [Zuplo][zuplo-url].
 | |
| 
 | |
| ---
 | |
| 
 | |
| # Overview
 | |
| 
 | |
| Django REST framework is a powerful and flexible toolkit for building Web APIs.
 | |
| 
 | |
| Some reasons you might want to use REST framework:
 | |
| 
 | |
| * The Web browsable API is a huge usability win for your developers.
 | |
| * [Authentication policies][authentication] including optional 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][docs], and [great community support][group].
 | |
| 
 | |
| **Below**: *Screenshot from the browsable API*
 | |
| 
 | |
| ![Screenshot][image]
 | |
| 
 | |
| ----
 | |
| 
 | |
| # Requirements
 | |
| 
 | |
| * Python 3.10+
 | |
| * Django 4.2, 5.0, 5.1, 5.2
 | |
| 
 | |
| We **highly recommend** and only officially support the latest patch release of
 | |
| each Python and Django series.
 | |
| 
 | |
| # Installation
 | |
| 
 | |
| Install using `pip`...
 | |
| 
 | |
|     pip install djangorestframework
 | |
| 
 | |
| Add `'rest_framework'` to your `INSTALLED_APPS` setting.
 | |
| ```python
 | |
| INSTALLED_APPS = [
 | |
|     ...
 | |
|     'rest_framework',
 | |
| ]
 | |
| ```
 | |
| 
 | |
| # Example
 | |
| 
 | |
| Let's take a look at a quick example of using REST framework to build a simple model-backed API for accessing users and groups.
 | |
| 
 | |
| Startup up a new project like so...
 | |
| 
 | |
|     pip install django
 | |
|     pip install djangorestframework
 | |
|     django-admin startproject example .
 | |
|     ./manage.py migrate
 | |
|     ./manage.py createsuperuser
 | |
| 
 | |
| 
 | |
| Now edit the `example/urls.py` module in your project:
 | |
| 
 | |
| ```python
 | |
| from django.contrib.auth.models import User
 | |
| from django.urls import include, path
 | |
| 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):
 | |
|     queryset = User.objects.all()
 | |
|     serializer_class = UserSerializer
 | |
| 
 | |
| 
 | |
| # Routers provide a way of automatically determining the URL conf.
 | |
| router = routers.DefaultRouter()
 | |
| router.register(r'users', UserViewSet)
 | |
| 
 | |
| # Wire up our API using automatic URL routing.
 | |
| # Additionally, we include login URLs for the browsable API.
 | |
| urlpatterns = [
 | |
|     path('', include(router.urls)),
 | |
|     path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
 | |
| ]
 | |
| ```
 | |
| 
 | |
| We'd also like to configure a couple of settings for our API.
 | |
| 
 | |
| Add the following to your `settings.py` module:
 | |
| 
 | |
| ```python
 | |
| INSTALLED_APPS = [
 | |
|     ...  # Make sure to include the default installed apps here.
 | |
|     'rest_framework',
 | |
| ]
 | |
| 
 | |
| REST_FRAMEWORK = {
 | |
|     # Use Django's standard `django.contrib.auth` permissions,
 | |
|     # or allow read-only access for unauthenticated users.
 | |
|     'DEFAULT_PERMISSION_CLASSES': [
 | |
|         'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
 | |
|     ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| That's it, we're done!
 | |
| 
 | |
|     ./manage.py runserver
 | |
| 
 | |
| You can now open the API in your browser at `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.
 | |
| 
 | |
| You can also interact with the API using command line tools such as [`curl`](https://curl.haxx.se/). For example, to list the users endpoint:
 | |
| 
 | |
|     $ curl -H 'Accept: application/json; indent=4' -u admin:password http://127.0.0.1:8000/users/
 | |
|     [
 | |
|         {
 | |
|             "url": "http://127.0.0.1:8000/users/1/",
 | |
|             "username": "admin",
 | |
|             "email": "admin@example.com",
 | |
|             "is_staff": true,
 | |
|         }
 | |
|     ]
 | |
| 
 | |
| Or to create a new user:
 | |
| 
 | |
|     $ curl -X POST -d username=new -d email=new@example.com -d is_staff=false -H 'Accept: application/json; indent=4' -u admin:password http://127.0.0.1:8000/users/
 | |
|     {
 | |
|         "url": "http://127.0.0.1:8000/users/2/",
 | |
|         "username": "new",
 | |
|         "email": "new@example.com",
 | |
|         "is_staff": false,
 | |
|     }
 | |
| 
 | |
| # Documentation & Support
 | |
| 
 | |
| Full documentation for the project is available at [https://www.django-rest-framework.org/][docs].
 | |
| 
 | |
| For questions and support, use the [REST framework discussion group][group], or `#restframework` on libera.chat IRC.
 | |
| 
 | |
| # Security
 | |
| 
 | |
| Please see the [security policy][security-policy].
 | |
| 
 | |
| [build-status-image]: https://github.com/encode/django-rest-framework/actions/workflows/main.yml/badge.svg
 | |
| [build-status]: https://github.com/encode/django-rest-framework/actions/workflows/main.yml
 | |
| [coverage-status-image]: https://img.shields.io/codecov/c/github/encode/django-rest-framework/main.svg
 | |
| [codecov]: https://codecov.io/github/encode/django-rest-framework?branch=main
 | |
| [pypi-version]: https://img.shields.io/pypi/v/djangorestframework.svg
 | |
| [pypi]: https://pypi.org/project/djangorestframework/
 | |
| [group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
 | |
| 
 | |
| [funding]: https://fund.django-rest-framework.org/topics/funding/
 | |
| [sponsors]: https://fund.django-rest-framework.org/topics/funding/#our-sponsors
 | |
| 
 | |
| [sentry-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/sentry-readme.png
 | |
| [stream-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/stream-readme.png
 | |
| [spacinov-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/spacinov-readme.png
 | |
| [retool-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/retool-readme.png
 | |
| [bitio-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/bitio-readme.png
 | |
| [posthog-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/posthog-readme.png
 | |
| [cryptapi-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/cryptapi-readme.png
 | |
| [fezto-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/fezto-readme.png
 | |
| [svix-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/svix-premium.png
 | |
| [zuplo-img]: https://raw.githubusercontent.com/encode/django-rest-framework/main/docs/img/premium/zuplo-readme.png
 | |
| 
 | |
| [sentry-url]: https://getsentry.com/welcome/
 | |
| [stream-url]: https://getstream.io/?utm_source=DjangoRESTFramework&utm_medium=Webpage_Logo_Ad&utm_content=Developer&utm_campaign=DjangoRESTFramework_Jan2022_HomePage
 | |
| [spacinov-url]: https://www.spacinov.com/
 | |
| [retool-url]: https://retool.com/?utm_source=djangorest&utm_medium=sponsorship
 | |
| [bitio-url]: https://bit.io/jobs?utm_source=DRF&utm_medium=sponsor&utm_campaign=DRF_sponsorship
 | |
| [posthog-url]: https://posthog.com?utm_source=drf&utm_medium=sponsorship&utm_campaign=open-source-sponsorship
 | |
| [cryptapi-url]: https://cryptapi.io
 | |
| [fezto-url]: https://www.fezto.xyz/?utm_source=DjangoRESTFramework
 | |
| [svix-url]: https://www.svix.com/?utm_source=django-REST&utm_medium=sponsorship
 | |
| [zuplo-url]: https://zuplo.link/django-gh
 | |
| 
 | |
| [oauth1-section]: https://www.django-rest-framework.org/api-guide/authentication/#django-rest-framework-oauth
 | |
| [oauth2-section]: https://www.django-rest-framework.org/api-guide/authentication/#django-oauth-toolkit
 | |
| [serializer-section]: https://www.django-rest-framework.org/api-guide/serializers/#serializers
 | |
| [modelserializer-section]: https://www.django-rest-framework.org/api-guide/serializers/#modelserializer
 | |
| [functionview-section]: https://www.django-rest-framework.org/api-guide/views/#function-based-views
 | |
| [generic-views]: https://www.django-rest-framework.org/api-guide/generic-views/
 | |
| [viewsets]: https://www.django-rest-framework.org/api-guide/viewsets/
 | |
| [routers]: https://www.django-rest-framework.org/api-guide/routers/
 | |
| [serializers]: https://www.django-rest-framework.org/api-guide/serializers/
 | |
| [authentication]: https://www.django-rest-framework.org/api-guide/authentication/
 | |
| [image]: https://www.django-rest-framework.org/img/quickstart.png
 | |
| 
 | |
| [docs]: https://www.django-rest-framework.org/
 | |
| [security-policy]: https://github.com/encode/django-rest-framework/security/policy
 |