diff --git a/README.md b/README.md index 078ac0711..b95bfa914 100644 --- a/README.md +++ b/README.md @@ -1,229 +1,49 @@ -# [Django REST framework][docs] +# FastAPI REST framework -[![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]. +Django has always lived up to it's tagline, The web framework for perfectionists with deadlines. +DRF has been facilitating this even more with it's amazing serializers, viewsets, filters, validators, routers and so on... --- +### Here are a few grapples with django we're aiming to address -# 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] - -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], and [Svix][svix-url]. - +- One issue with django is that since it's designed as an all-encompassing web framework, designed before the advent of microservices, it comes with a lot of bloat that's not needed +for api services. +- Alternate frameworks like fastapi exist, which are laser focused on these exact priorities but lack the structure and maturity that a DRF based project has from the get-go. +- Another issue with django is it's tight coupling with app registry and makes things like dynamic table creation non trivial to say the least... +- The settings being lazyloaded makes restarts necessary for any change which makes dynamic configuration only possible outside the core settings. +- ... --- -# Overview +This project aims to retain all functionalities of DRF minus the bloat of django... -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]. - -There is a live example API for testing purposes, [available here][sandbox]. - -**Below**: *Screenshot from the browsable API* - -![Screenshot][image] - ----- # Requirements -* Python 3.6+ -* Django 4.2, 4.1, 4.0, 3.2, 3.1, 3.0 +* Python 3.9+ +* FastAPI 0.104.1+ + -We **highly recommend** and only officially support the latest patch release of -each Python and Django series. # Installation -Install using `pip`... +Clone this repository - pip install djangorestframework - -Add `'rest_framework'` to your `INSTALLED_APPS` setting. -```python -INSTALLED_APPS = [ - ... - 'rest_framework', -] +```bash +python setup.py install ``` -# Example +Install using `pip`... **TBD** -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 + pip install fastapirestframework -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 +# Note +### This is a new fork of DRF, and serves more as a promise as of now... +*As and when these functionalities are ready, we'll update this readme* -# Serializers define the API representation. -class UserSerializer(serializers.HyperlinkedModelSerializer): - class Meta: - model = User - fields = ['url', 'username', 'email', 'is_staff'] +# Contribution - -# 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. - -You may also want to [follow the author on Twitter][twitter]. - -# 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/master.svg -[codecov]: https://codecov.io/github/encode/django-rest-framework?branch=master -[pypi-version]: https://img.shields.io/pypi/v/djangorestframework.svg -[pypi]: https://pypi.org/project/djangorestframework/ -[twitter]: https://twitter.com/starletdreaming -[group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework -[sandbox]: https://restframework.herokuapp.com/ - -[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/master/docs/img/premium/sentry-readme.png -[stream-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/stream-readme.png -[spacinov-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/spacinov-readme.png -[retool-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/retool-readme.png -[bitio-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/bitio-readme.png -[posthog-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/posthog-readme.png -[cryptapi-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/cryptapi-readme.png -[fezto-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/fezto-readme.png -[svix-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/svix-premium.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 - -[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 +*Any and every contribution is welcome ☻*