Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add rest API endpoints to Circles to allow CRUD requests #213

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
9 changes: 9 additions & 0 deletions project/circles/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from rest_framework import serializers

from .models import Circle


class CircleSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Circle
fields = ("id", "name", "photo")
15 changes: 15 additions & 0 deletions project/circles/views.py
Original file line number Diff line number Diff line change
@@ -10,8 +10,11 @@
from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated

from .models import Circle, Companion, JoinRequest
from .serializers import CircleSerializer


class CompanionDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
@@ -241,3 +244,15 @@ def get(self, request, circle_id, join_request_id, *args, **kwargs):
join_request.delete()

return redirect(circle)


# Only returns circles that user is a companion of
class CircleViewSet(viewsets.ModelViewSet):
serializer_class = CircleSerializer
permission_classes = [IsAuthenticated]

def get_queryset(self):
user = self.request.user
circles = Circle.objects.filter(companions_through__user=user)

return circles
6 changes: 6 additions & 0 deletions project/core/urls.py
Original file line number Diff line number Diff line change
@@ -13,14 +13,19 @@
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from circles import views
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path
from django.views.generic.base import TemplateView
from rest_framework.routers import DefaultRouter

media_urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

router = DefaultRouter()
router.register(r"circles", views.CircleViewSet, basename="circle")

api_urlpatterns = [
path(
"accounts/registration/",
@@ -34,6 +39,7 @@

urlpatterns = [
path("api/v1/", include(api_urlpatterns)),
path("api/v1/", include(router.urls)),
path("__debug__/", include("debug_toolbar.urls")),
path("", TemplateView.as_view(template_name="home.html"), name="home"),
path("admin/", admin.site.urls),