{"id":14979107,"url":"https://github.com/assem-ch/django-fast-api","last_synced_at":"2025-10-28T14:30:49.501Z","repository":{"id":41905993,"uuid":"476402088","full_name":"assem-ch/django-fast-api","owner":"assem-ch","description":"Few hacks to speed up defining  apis based on django rest framwork, inspired from fastapi. Please give it a try and let me know your feedback.","archived":false,"fork":false,"pushed_at":"2024-08-27T23:26:02.000Z","size":32,"stargazers_count":17,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-09-29T02:21:52.798Z","etag":null,"topics":["django","django-rest-framework","fastapi","swagger"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/assem-ch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-31T17:05:00.000Z","updated_at":"2024-08-31T08:32:47.000Z","dependencies_parsed_at":"2024-08-28T00:59:39.114Z","dependency_job_id":null,"html_url":"https://github.com/assem-ch/django-fast-api","commit_stats":{"total_commits":17,"total_committers":3,"mean_commits":5.666666666666667,"dds":"0.11764705882352944","last_synced_commit":"d23157a54f431288a5d75d37fbce7013ef764624"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":"UnchainedTeam/django-reusable-app-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assem-ch%2Fdjango-fast-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assem-ch%2Fdjango-fast-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assem-ch%2Fdjango-fast-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assem-ch%2Fdjango-fast-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/assem-ch","download_url":"https://codeload.github.com/assem-ch/django-fast-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219859520,"owners_count":16556036,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","django-rest-framework","fastapi","swagger"],"created_at":"2024-09-24T13:59:14.279Z","updated_at":"2025-10-28T14:30:49.158Z","avatar_url":"https://github.com/assem-ch.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Django Fast API  \n=================\n\nFew hacks to speed up defining APIs based on django rest framwork, inspired from fastapi\n\n**First version tested on: python 3.9 and django 4.0**\n\nFeatures:\n---------\n- [x] Function based view\n- [x] Easy to use decorator\n- [x] Accepts validation of input and output using DRF serializers\n- [x] Accept CamelCased input and group all rest input methods in same dict :`req`\n- [x] Jsonify and camelcase any type of output: `str`, `dict`, `QuerySet`, `Model`\n- [x] AutoSchema docs using drf-spectacular\n- [x] Error handler that works with DRF\n- [ ] Better way to pass the `request` object inside views\n- [ ] Convert DRF serializers into a type annotation classes for better processing by IDEs\n\nQuick start\n-----------\n\n1. Install the lib::\n\n     `$ pip install django-fast-api`\n\n1. Add \"drf_spectacular\" to your ``INSTALLED_APPS`` setting like this::\n```python\n    INSTALLED_APPS = [\n        ...\n         \"drf_spectacular\",\n        ...\n    ]\n```\n2. Include the swagger documentation  in your project ``urls.py`` like this::\n```python\n    from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView\n\n    path('api-schema/', SpectacularAPIView.as_view(), name='schema'),\n    path('api-doc/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),\n```\n3. Add open api schema class and  exception handler to \"REST_FRAMEWORK\" settings::\n```python\n\n    REST_FRAMEWORK = {\n        'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',\n        'EXCEPTION_HANDLER': 'fast_api.error_handling.exception_handler'\n    }\n\n```\n4. Examples of usage in views::\n```python\n\n    from fast_api.decorators import APIRouter\n\n    router = APIRouter()\n    from . import serializers, models\n\n    @router.api('public/health_check')\n    def health_check(req):\n        return \"ok\"\n\n    @router.api('sample')\n    def sample_view():\n        return {\n            'key' : 'value'\n        }\n    \n    @router.api('sample/error')\n    def error_view():\n        assert  False, \"This is the error message user will get\"\n\n\n    # with input \u0026 output validation\n    \n    from rest_framework import serializers\n    from test_api.models import Country\n\n\n    class CreateCountryRequest(serializers.ModelSerializer):\n        class Meta:\n            model = Country\n            fields = ['name']\n    \n    \n    class GetCountryRequest(serializers.Serializer):\n        id = serializers.IntegerField()\n    \n    class CountryResponse(serializers.ModelSerializer):\n        class Meta:\n            model = Country\n            fields = ['name']\n            \n    @router.api('country/create')\n    def create_company(req: serializers.CreateCountryRequest) -\u003e serializers.CountryResponse:\n        return models.Country.objects.create(**req.args)\n    \n    \n    @router.api('country/get')\n    def create_company(req: GetCountryRequest) -\u003e CountryResponse:\n        return models.Country.objects.get(id=req.args.id)   \n ```\n\n* req is a django request\n* you will find all endpoint args in req.args\n\nIssues and  Feedback\n====================\n\nIf you found an issue or you have a feedback , don't hesitate to point to it  as a github issue. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fassem-ch%2Fdjango-fast-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fassem-ch%2Fdjango-fast-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fassem-ch%2Fdjango-fast-api/lists"}