Skip to content

Commit 3bb351f

Browse files
author
Mohamed207470
committed
3. Adding an API to an Existing Project -- videos 1 a 8
1 parent 15e0352 commit 3bb351f

File tree

7 files changed

+44
-2
lines changed

7 files changed

+44
-2
lines changed
386 Bytes
Binary file not shown.

api/__pycache__/urls.cpython-37.pyc

55 Bytes
Binary file not shown.

api/__pycache__/views.cpython-37.pyc

1.45 KB
Binary file not shown.

api/serializers.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,10 @@ class TodoSerializer(serializers.ModelSerializer):
77

88
class Meta:
99
model = Todo
10-
fields = ['id','title','memo','created','datecompleted','important']
10+
fields = ['id','title','memo','created','datecompleted','important']
11+
12+
class TodoCompleteSerializer(serializers.ModelSerializer):
13+
class Meta:
14+
model = Todo
15+
fields = ['id']
16+
read_only_fields = ['title','memo','created','datecompleted','important']

api/urls.py

+1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
urlpatterns = [
55
path('todos', views.TodoListCreate.as_view()),
66
path('todos/<int:pk>', views.TodoRetrieveUpdateDestroy.as_view()),
7+
path('todos/<int:pk>/complete',views.TodoComplete.as_view()),
78
path('todos/completed', views.TodoCompletedList.as_view()),
89
]

api/views.py

+36-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,30 @@
1+
from django.contrib.auth import login
2+
from django.contrib.auth.models import User
3+
from django.shortcuts import render, redirect
4+
from django.utils import timezone
5+
from django.views.decorators.csrf import csrf_exempt
6+
17
from rest_framework import generics, permissions
8+
from django.db import IntegrityError
9+
from django.http import JsonResponse
10+
from rest_framework.parsers import JSONParser
211

312
from todo.models import Todo
4-
from .serializers import TodoSerializer
13+
from .serializers import TodoSerializer, TodoCompleteSerializer
14+
15+
16+
@csrf_exempt
17+
def signupuser(request):
18+
if request.method == 'POST':
19+
try:
20+
data = JSONParser().parse(request)
21+
user = User.objects.create_user(data['username'], password=data['password'])
22+
user.save()
23+
login(request, user)
24+
return JsonResponse({'token':'gjewijgipew'}, status=201)
25+
except IntegrityError:
26+
return JsonResponse({'error':'That username has already been taken. Please choose a new username'},status=400)
27+
528

629
class TodoCompletedList(generics.ListAPIView):
730
serializer_class = TodoSerializer
@@ -31,4 +54,16 @@ def get_queryset(self):
3154
user = self.request.user
3255
return Todo.objects.filter(user=user)
3356

57+
class TodoComplete(generics.UpdateAPIView):
58+
serializer_class = TodoCompleteSerializer
59+
permission_classes = [permissions.IsAuthenticated]
60+
61+
def get_queryset(self):
62+
user = self.request.user
63+
return Todo.objects.filter(user=user)
64+
65+
def perform_update(self, serializer):
66+
serializer.instance.datecompleted = timezone.now()
67+
serializer.save()
68+
3469

db.sqlite3

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)