Skip to content

Commit b7977cf

Browse files
committed
adding rest apis
1 parent c5b8a6b commit b7977cf

File tree

10 files changed

+337
-45
lines changed

10 files changed

+337
-45
lines changed

src/django_project/core/settings.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"django.contrib.messages",
5555
"django.contrib.staticfiles",
5656
# third party apps
57+
"djangoaddicts.codegen",
5758
"django_extensions",
5859
"django_filters",
5960
"drf_spectacular",
@@ -268,7 +269,9 @@
268269
# drf configuration
269270
REST_FRAMEWORK = {
270271
"DEFAULT_FILTER_BACKENDS": ("django_filters.rest_framework.DjangoFilterBackend",),
271-
"DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAuthenticatedOrReadOnly",),
272+
"DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAuthenticatedOrReadOnly",)
273+
if DEBUG
274+
else ("rest_framework.permissions.IsAuthenticated",),
272275
"DEFAULT_AUTHENTICATION_CLASSES": (
273276
"rest_framework.authentication.TokenAuthentication",
274277
"rest_framework.authentication.SessionAuthentication",
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
from django.conf.urls import include
22
from django.urls import path
33
from rest_framework import routers
4+
from web.views import viewsets
45

56
app_name = "rest"
67

7-
v1_router = routers.DefaultRouter()
8+
router = routers.DefaultRouter()
9+
10+
# web API Endpoints
11+
router.register(r"event", viewsets.EventViewSet, "event")
12+
router.register(r"presentationrequest", viewsets.PresentationRequestViewSet, "presentationrequest")
13+
router.register(r"resource", viewsets.ResourceViewSet, "resource")
14+
router.register(r"resourcecategory", viewsets.ResourceCategoryViewSet, "resourcecategory")
15+
router.register(r"topicsuggestion", viewsets.TopicSuggestionViewSet, "topicsuggestion")
816

917

1018
urlpatterns = [
1119
# API views
12-
path("", include(v1_router.urls)),
13-
path("v1/", include(v1_router.urls)),
20+
path("", include(router.urls)),
21+
path("v1/", include(router.urls)),
1422
]

src/django_project/core/urls/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
# 3rd party URLs
3232
path("handyhelpers/", include("handyhelpers.urls")),
3333
# RESTful API URLs
34-
path("rest/", include("core.urls.rest", namespace="rest")),
34+
path("rest/", include("core.urls.rest", namespace="")),
3535
path("rest/schema/", SpectacularAPIView.as_view(), name="schema"),
3636
path("rest/swagger/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger"),
3737
path("rest/redoc/", SpectacularRedocView.as_view(url_name="schema"), name="redoc"),

src/django_project/web/admin.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,33 @@
1212

1313

1414
class ResourceCategoryAdmin(admin.ModelAdmin):
15-
list_display: list[str] = ["id", "created_at", "updated_at", "name"]
15+
list_display: list[str] = ["id", "name", "created_at", "updated_at"]
1616
search_fields: list[str] = ["id", "name"]
1717
list_filter: list[str | type[ListFilter] | tuple[str, type[ListFilter]]] = []
1818

1919

2020
class ResourceAdmin(admin.ModelAdmin):
21-
list_display: list[str] = ["id", "created_at", "updated_at", "name", "description", "url", "category"]
21+
list_display: list[str] = ["id", "name", "description", "url", "category", "created_at", "updated_at"]
2222
search_fields: list[str] = ["id", "name", "description", "url"]
2323
list_filter: list[str] = ["category"]
2424

2525

2626
class TopicSuggestionAdmin(admin.ModelAdmin):
27-
list_display: list[str] = ["id", "created_at", "updated_at", "title", "description", "skill_level", "email"]
27+
list_display: list[str] = ["id", "title", "description", "skill_level", "email", "created_at", "updated_at"]
2828
search_fields: list[str] = ["id", "title", "description", "skill_level", "email"]
2929
list_filter: list[str] = ["skill_level"]
3030

3131

3232
class PresentationRequestAdmin(admin.ModelAdmin):
3333
list_display: list[str] = [
3434
"id",
35-
"created_at",
36-
"updated_at",
3735
"presenter",
3836
"email",
3937
"title",
4038
"description",
4139
"skill_level",
40+
"created_at",
41+
"updated_at",
4242
]
4343
search_fields: list[str] = ["id", "presenter", "email", "title", "description", "skill_level"]
4444
list_filter: list[str] = ["skill_level"]
@@ -47,13 +47,13 @@ class PresentationRequestAdmin(admin.ModelAdmin):
4747
class EventAdmin(admin.ModelAdmin):
4848
list_display: list[str] = [
4949
"id",
50-
"created_at",
51-
"updated_at",
5250
"name",
5351
"start_date_time",
5452
"end_date_time",
5553
"location",
5654
"description",
55+
"created_at",
56+
"updated_at",
5757
]
5858
search_fields: list[str] = ["id", "name", "location", "description"]
5959
list_filter: list[str | type[ListFilter] | tuple[str, type[ListFilter]]] = []
Lines changed: 107 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,110 @@
1-
"""filtersets for applicable web models"""
1+
"""filtersets for applicable app models"""
22

3+
from rest_framework_filters.filters import BooleanFilter, RelatedFilter
4+
from rest_framework_filters.filterset import FilterSet
35

46
# import models
5-
# from web.models import ()
7+
from web.models import (
8+
Event,
9+
PresentationRequest,
10+
Resource,
11+
ResourceCategory,
12+
TopicSuggestion,
13+
)
14+
15+
16+
class EventFilterSet(FilterSet):
17+
"""filterset class for Event"""
18+
19+
class Meta:
20+
"""Metaclass to define filterset model and fields"""
21+
22+
model = Event
23+
fields = {
24+
"created_at": "__all__",
25+
"description": "__all__",
26+
"end_date_time": "__all__",
27+
"id": "__all__",
28+
"location": "__all__",
29+
"name": "__all__",
30+
"start_date_time": "__all__",
31+
"updated_at": "__all__",
32+
"url": "__all__",
33+
}
34+
35+
36+
class PresentationRequestFilterSet(FilterSet):
37+
"""filterset class for PresentationRequest"""
38+
39+
class Meta:
40+
"""Metaclass to define filterset model and fields"""
41+
42+
model = PresentationRequest
43+
fields = {
44+
"created_at": "__all__",
45+
"description": "__all__",
46+
"email": "__all__",
47+
"id": "__all__",
48+
"presenter": "__all__",
49+
"skill_level": "__all__",
50+
"title": "__all__",
51+
"updated_at": "__all__",
52+
}
53+
54+
55+
class ResourceFilterSet(FilterSet):
56+
"""filterset class for Resource"""
57+
58+
category = RelatedFilter(
59+
"ResourceCategoryFilterSet", field_name="category", queryset=ResourceCategory.objects.all()
60+
)
61+
62+
class Meta:
63+
"""Metaclass to define filterset model and fields"""
64+
65+
model = Resource
66+
fields = {
67+
"category": "__all__",
68+
"created_at": "__all__",
69+
"description": "__all__",
70+
"id": "__all__",
71+
"name": "__all__",
72+
"updated_at": "__all__",
73+
"url": "__all__",
74+
}
75+
76+
77+
class ResourceCategoryFilterSet(FilterSet):
78+
"""filterset class for ResourceCategory"""
79+
80+
resources = RelatedFilter("ResourceFilterSet", field_name="resources", queryset=Resource.objects.all())
81+
has_resources = BooleanFilter(field_name="resources", lookup_expr="isnull", exclude=True)
82+
83+
class Meta:
84+
"""Metaclass to define filterset model and fields"""
85+
86+
model = ResourceCategory
87+
fields = {
88+
"created_at": "__all__",
89+
"id": "__all__",
90+
"name": "__all__",
91+
"updated_at": "__all__",
92+
}
93+
94+
95+
class TopicSuggestionFilterSet(FilterSet):
96+
"""filterset class for TopicSuggestion"""
97+
98+
class Meta:
99+
"""Metaclass to define filterset model and fields"""
100+
101+
model = TopicSuggestion
102+
fields = {
103+
"created_at": "__all__",
104+
"description": "__all__",
105+
"email": "__all__",
106+
"id": "__all__",
107+
"skill_level": "__all__",
108+
"title": "__all__",
109+
"updated_at": "__all__",
110+
}
Lines changed: 105 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,107 @@
1-
"""DRF serailizers for applicable web models"""
2-
1+
from rest_flex_fields import FlexFieldsModelSerializer
2+
from rest_framework import serializers
33

44
# import models
5-
# from web.models import ()
5+
from web.models import (
6+
Event,
7+
PresentationRequest,
8+
Resource,
9+
ResourceCategory,
10+
TopicSuggestion,
11+
)
12+
13+
14+
class EventSerializer(FlexFieldsModelSerializer):
15+
"""serializer class for Event"""
16+
17+
class Meta:
18+
"""Metaclass to define filterset model and fields"""
19+
20+
model = Event
21+
fields = [
22+
"created_at",
23+
"description",
24+
"end_date_time",
25+
"id",
26+
"location",
27+
"name",
28+
"start_date_time",
29+
"updated_at",
30+
"url",
31+
]
32+
33+
34+
class PresentationRequestSerializer(FlexFieldsModelSerializer):
35+
"""serializer class for PresentationRequest"""
36+
37+
class Meta:
38+
"""Metaclass to define filterset model and fields"""
39+
40+
model = PresentationRequest
41+
fields = [
42+
"created_at",
43+
"description",
44+
"email",
45+
"id",
46+
"presenter",
47+
"skill_level",
48+
"title",
49+
"updated_at",
50+
]
51+
52+
53+
class ResourceSerializer(FlexFieldsModelSerializer):
54+
"""serializer class for Resource"""
55+
56+
category = serializers.StringRelatedField()
57+
58+
class Meta:
59+
"""Metaclass to define filterset model and fields"""
60+
61+
model = Resource
62+
fields = [
63+
"category",
64+
"created_at",
65+
"description",
66+
"id",
67+
"name",
68+
"updated_at",
69+
"url",
70+
]
71+
72+
expandable_fields = {
73+
"category": "web.serializers.ResourceCategorySerializer",
74+
}
75+
76+
77+
class ResourceCategorySerializer(FlexFieldsModelSerializer):
78+
"""serializer class for ResourceCategory"""
79+
80+
class Meta:
81+
"""Metaclass to define filterset model and fields"""
82+
83+
model = ResourceCategory
84+
fields = [
85+
"created_at",
86+
"id",
87+
"name",
88+
"updated_at",
89+
]
90+
91+
92+
class TopicSuggestionSerializer(FlexFieldsModelSerializer):
93+
"""serializer class for TopicSuggestion"""
94+
95+
class Meta:
96+
"""Metaclass to define filterset model and fields"""
97+
98+
model = TopicSuggestion
99+
fields = [
100+
"created_at",
101+
"description",
102+
"email",
103+
"id",
104+
"skill_level",
105+
"title",
106+
"updated_at",
107+
]
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from .gui import urlpatterns as gui_urls
2-
from .rest import urlpatterns as rest_urls
32

43
app_name = "web"
54

6-
urlpatterns = rest_urls + gui_urls
5+
urlpatterns = gui_urls

src/django_project/web/urls/rest.py

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/django_project/web/views/rest.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)