@@ -47,9 +47,13 @@ class ProjectDefault(Configuration):
4747 "django.contrib.sessions" ,
4848 "django.contrib.messages" ,
4949 "django.contrib.staticfiles" ,
50+ "rest_framework" ,
51+ "cors_headers" ,
52+ "drf_spectacular" ,
5053 ]
5154
5255 MIDDLEWARE = [
56+ "corsheaders.middleware.CorsMiddleware" ,
5357 "django.middleware.security.SecurityMiddleware" ,
5458 "django.contrib.sessions.middleware.SessionMiddleware" ,
5559 "django.middleware.common.CommonMiddleware" ,
@@ -181,6 +185,56 @@ class ProjectDefault(Configuration):
181185
182186 SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO" , "https" )
183187
188+ # Django REST Framework
189+ # https://www.django-rest-framework.org/api-guide/settings/
190+
191+ REST_FRAMEWORK : dict = {
192+ "DEFAULT_AUTHENTICATION_CLASSES" : [
193+ "rest_framework.authentication.SessionAuthentication" ,
194+ ],
195+ "DEFAULT_FILTER_BACKENDS" : [
196+ "django_filters.rest_framework.DjangoFilterBackend"
197+ ],
198+ "DEFAULT_PARSER_CLASSES" : [
199+ "djangorestframework_camel_case.parser.CamelCaseMultiPartParser" ,
200+ "djangorestframework_camel_case.parser.CamelCaseJSONParser" ,
201+ ],
202+ "DEFAULT_PERMISSION_CLASSES" : ["rest_framework.permissions.IsAuthenticated" ],
203+ "DEFAULT_RENDERER_CLASSES" : [
204+ "djangorestframework_camel_case.render.CamelCaseJSONRenderer" ,
205+ ],
206+ "DEFAULT_SCHEMA_CLASS" : "drf_spectacular.openapi.AutoSchema" ,
207+ }
208+
209+ # Django CORS Headers
210+ # https://github.com/adamchainz/django-cors-headers
211+
212+ CORS_ALLOW_ALL_ORIGINS = True
213+
214+ # API Documentation
215+
216+ ENABLE_API_DOC = values .BooleanValue (False )
217+
218+ # drf-spectacular
219+ # https://drf-spectacular.readthedocs.io/en/latest/
220+
221+ SPECTACULAR_SETTINGS = {
222+ "TITLE" : "{{ cookiecutter.project_name }}" ,
223+ "DESCRIPTION" : "API Documentation" ,
224+ "VERSION" : "1.0.0" ,
225+ "CAMELIZE_NAMES" : True ,
226+ "SWAGGER_UI_SETTINGS" : {
227+ "deepLinking" : True ,
228+ "displayRequestDuration" : True ,
229+ "persistAuthorization" : True ,
230+ "syntaxHighlight.activate" : True ,
231+ },
232+ "POSTPROCESSING_HOOKS" : [
233+ "drf_spectacular.hooks.postprocess_schema_enums" ,
234+ "drf_spectacular.contrib.djangorestframework_camel_case.camelize_serializer_fields" , # noqa
235+ ],
236+ }
237+
184238
185239class Local (ProjectDefault ):
186240 """The local settings."""
@@ -251,6 +305,18 @@ class Local(ProjectDefault):
251305 "verbose_names" : True ,
252306 }
253307
308+ # Django REST Framework
309+ # https://www.django-rest-framework.org/api-guide/settings/
310+
311+ REST_FRAMEWORK = {
312+ ** ProjectDefault .REST_FRAMEWORK ,
313+ "DEFAULT_RENDERER_CLASSES" : [
314+ * ProjectDefault .REST_FRAMEWORK ["DEFAULT_RENDERER_CLASSES" ],
315+ "djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer" ,
316+ ],
317+ }
318+
319+
254320
255321class Testing (ProjectDefault ):
256322 """The testing settings."""
@@ -318,13 +384,15 @@ class Testing(ProjectDefault):
318384class Remote (ProjectDefault ):
319385 """The remote settings."""
320386
387+ # Application definition
388+
389+ MIDDLEWARE = ProjectDefault .MIDDLEWARE .copy ()
390+
321391 # Debug
322392 # https://docs.djangoproject.com/en/stable/ref/settings/#debug
323393
324394 DEBUG = False
325395
326- MIDDLEWARE = ProjectDefault .MIDDLEWARE .copy ()
327-
328396 # Email URL
329397 # https://django-configurations.readthedocs.io/en/stable/values/
330398
0 commit comments