Skip to content

Commit c9151e4

Browse files
author
Juan Benitez
committed
change function based views to generic views on movie app
1 parent 60706fe commit c9151e4

File tree

7 files changed

+63
-51
lines changed

7 files changed

+63
-51
lines changed

.vscode/settings.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"python.linting.pylintEnabled": true,
3+
"python.pythonPath": "env\\Scripts\\python.exe"
4+
}

api_crud/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
REST_FRAMEWORK = {
3131
'DEFAULT_AUTHENTICATION_CLASSES': (
32-
'api_crud.authentication.JWTAuthentication',
32+
'rest_framework.authentication.TokenAuthentication',
3333
)
3434
}
3535

db.sqlite3

0 Bytes
Binary file not shown.

movies/permissions.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@ class IsAuthenticated(permissions.BasePermission):
2121
"""
2222
Allows access only to authenticated users.
2323
"""
24-
print("df")
25-
2624
def has_permission(self, request, view):
27-
message = 'No estas autenticado mi vale!'
25+
message = 'You must be authenticated'
2826
is_it = bool(request.user and request.user.is_authenticated)
2927
if is_it:
3028
return is_it

movies/serializers.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
from django.contrib.auth.models import User
44

55

6-
7-
class MovieSerializer(serializers.ModelSerializer): # create classs to serializer model
6+
class MovieSerializer(serializers.ModelSerializer): # create class to serializer model
87
creator = serializers.ReadOnlyField(source='creator.username')
98

109
class Meta:
1110
model = Movie
1211
fields = ('title', 'genre', 'year', 'creator')
1312

1413

15-
class UserSerializer(serializers.ModelSerializer): #create class to serealizer usermodel
14+
class UserSerializer(serializers.ModelSerializer): # create class to serializer usermodel
1615
movies = serializers.PrimaryKeyRelatedField(many=True, queryset=Movie.objects.all())
1716

1817
class Meta:

movies/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
urlpatterns = [
66
url(r'^api/v1/movies/(?P<pk>[0-9]+)$', # urls with details i.e /movies/(1-9)
7-
views.get_delete_update_movie,
7+
views.get_delete_update_movie.as_view(),
88
name='get_delete_update_movie'
99
),
1010
url(
1111
r'^api/v1/movies/$', # urls list all and create new one
12-
views.get_post_movies,
12+
views.get_post_movies.as_view(),
1313
name='get_post_movies'
1414
)
1515
]

movies/views.py

Lines changed: 53 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,78 @@
1-
from rest_framework.decorators import api_view, permission_classes
2-
from rest_framework.response import Response
31
from rest_framework import status
4-
from rest_framework.parsers import JSONParser
2+
from rest_framework.response import Response
3+
from rest_framework.generics import RetrieveUpdateDestroyAPIView, ListCreateAPIView
54
from .models import Movie
6-
from .serializers import MovieSerializer
75
from .permissions import IsOwnerOrReadOnly, IsAuthenticated
6+
from .serializers import MovieSerializer
87

8+
class get_delete_update_movie(RetrieveUpdateDestroyAPIView):
9+
permission_classes = (IsAuthenticated, IsOwnerOrReadOnly,)
910

10-
@api_view(['GET', 'DELETE', 'PUT']) # Methods Allowed
11-
@permission_classes((IsAuthenticated, IsOwnerOrReadOnly,)) # Pemissions, Only Authenticated user
12-
def get_delete_update_movie(request, pk): #pk es PrimaryKey(Id)
13-
try:
14-
movie = Movie.objects.get(pk=pk)
15-
except Movie.DoesNotExist:
16-
content = {
17-
'status': 'Not Found'
18-
}
19-
return Response(content, status=status.HTTP_404_NOT_FOUND)
11+
def get_queryset(self, pk):
12+
try:
13+
movie = Movie.objects.get(pk=pk)
14+
except Movie.DoesNotExist:
15+
content = {
16+
'status': 'Not Found'
17+
}
18+
return Response(content, status=status.HTTP_404_NOT_FOUND)
19+
return movie
20+
21+
# Get a movie
22+
def get(self, request, pk):
2023

21-
# details a sinlge movie
22-
if request.method == 'GET':
24+
movie = self.get_queryset(pk)
2325
serializer = MovieSerializer(movie)
24-
return Response(serializer.data)
25-
# delete a movie
26-
elif request.method == 'DELETE':
26+
return Response(serializer.data, status=status.HTTP_200_OK)
27+
28+
# Update a movie
29+
def put(self, request, pk):
30+
31+
movie = self.get_queryset(pk)
32+
2733
if(request.user == movie.creator): # If creator is who makes request
28-
movie.delete()
29-
content = {
30-
'status': 'NO CONTENT'
31-
}
32-
return Response(content, status=status.HTTP_204_NO_CONTENT)
34+
serializer = MovieSerializer(movie, data=request.data)
35+
if serializer.is_valid():
36+
serializer.save()
37+
return Response(serializer.data, status=status.HTTP_201_CREATED)
38+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
3339
else:
3440
content = {
3541
'status': 'UNAUTHORIZED'
3642
}
3743
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
38-
# update a movie
39-
elif request.method == 'PUT':
44+
45+
# Delete a movie
46+
def delete(self, request, pk):
47+
48+
movie = self.get_queryset(pk)
49+
4050
if(request.user == movie.creator): # If creator is who makes request
41-
serializer = MovieSerializer(movie, data=request.data)
42-
if serializer.is_valid():
43-
serializer.save()
44-
return Response(serializer.data, status=status.HTTP_201_CREATED)
45-
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
51+
movie.delete()
52+
content = {
53+
'status': 'NO CONTENT'
54+
}
55+
return Response(content, status=status.HTTP_204_NO_CONTENT)
4656
else:
4757
content = {
4858
'status': 'UNAUTHORIZED'
4959
}
5060
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
61+
62+
63+
class get_post_movies(ListCreateAPIView):
64+
65+
permission_classes = (IsAuthenticated,)
66+
# Get all movies
67+
def get(self, request):
5168

69+
movies = Movie.objects.all()
70+
serializer = MovieSerializer(movies, many=True)
71+
return Response(serializer.data, status=status.HTTP_200_OK)
5272

53-
@api_view(['GET', 'POST'])
54-
@permission_classes((IsAuthenticated, ))
55-
def get_post_movies(request):
56-
print('adasd')
57-
# get all movies
58-
if request.method == 'GET':
59-
puppies = Movie.objects.all()
60-
serializer = MovieSerializer(puppies, many=True)
61-
return Response(serializer.data)
73+
# Create a new movie
74+
def post(self, request):
6275

63-
# create a new movie
64-
elif request.method == 'POST':
6576
serializer = MovieSerializer(data=request.data)
6677
if serializer.is_valid():
6778
serializer.save(creator=request.user)

0 commit comments

Comments
 (0)