First commit of the V2.
New base, new info.
This commit is contained in:
149
music/views.py
Normal file
149
music/views.py
Normal file
@@ -0,0 +1,149 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth import authenticate, login
|
||||
|
||||
from rest_framework import generics
|
||||
from rest_framework import permissions
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import status
|
||||
from rest_framework_jwt.settings import api_settings
|
||||
|
||||
from .decorators import validate_request_data
|
||||
from .models import Songs
|
||||
from .serializers import SongsSerializer, TokenSerializer, UserSerializer
|
||||
|
||||
import logging
|
||||
import json
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Get the JWT settings
|
||||
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
|
||||
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
|
||||
|
||||
|
||||
class ListCreateSongsView(generics.ListCreateAPIView):
|
||||
"""
|
||||
GET songs/
|
||||
POST songs/
|
||||
"""
|
||||
queryset = Songs.objects.all()
|
||||
serializer_class = SongsSerializer
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
|
||||
@validate_request_data
|
||||
def post(self, request, *args, **kwargs):
|
||||
a_song = Songs.objects.create(
|
||||
title=request.data["title"],
|
||||
artist=request.data["artist"]
|
||||
)
|
||||
return Response(
|
||||
data=SongsSerializer(a_song).data,
|
||||
status=status.HTTP_201_CREATED
|
||||
)
|
||||
|
||||
|
||||
class SongsDetailView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
GET songs/:id/
|
||||
PUT songs/:id/
|
||||
DELETE songs/:id/
|
||||
"""
|
||||
queryset = Songs.objects.all()
|
||||
serializer_class = SongsSerializer
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
try:
|
||||
a_song = self.queryset.get(pk=kwargs["pk"])
|
||||
return Response(SongsSerializer(a_song).data)
|
||||
except Songs.DoesNotExist:
|
||||
return Response(
|
||||
data={
|
||||
"message": "Song with id: {} does not exist".format(kwargs["pk"])
|
||||
},
|
||||
status=status.HTTP_404_NOT_FOUND
|
||||
)
|
||||
|
||||
@validate_request_data
|
||||
def put(self, request, *args, **kwargs):
|
||||
try:
|
||||
a_song = self.queryset.get(pk=kwargs["pk"])
|
||||
serializer = SongsSerializer()
|
||||
updated_song = serializer.update(a_song, request.data)
|
||||
return Response(SongsSerializer(updated_song).data)
|
||||
except Songs.DoesNotExist:
|
||||
return Response(
|
||||
data={
|
||||
"message": "Song with id: {} does not exist".format(kwargs["pk"])
|
||||
},
|
||||
status=status.HTTP_404_NOT_FOUND
|
||||
)
|
||||
|
||||
def delete(self, request, *args, **kwargs):
|
||||
try:
|
||||
a_song = self.queryset.get(pk=kwargs["pk"])
|
||||
a_song.delete()
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
except Songs.DoesNotExist:
|
||||
return Response(
|
||||
data={
|
||||
"message": "Song with id: {} does not exist".format(kwargs["pk"])
|
||||
},
|
||||
status=status.HTTP_404_NOT_FOUND
|
||||
)
|
||||
|
||||
|
||||
|
||||
class LoginView(generics.CreateAPIView):
|
||||
"""
|
||||
POST auth/login/
|
||||
"""
|
||||
|
||||
# This permission class will over ride the global permission
|
||||
# class setting
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
queryset = User.objects.all()
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
logger.error('post LoginView')
|
||||
username = request.data.get("username", "")
|
||||
password = request.data.get("password", "")
|
||||
user = authenticate(request, username=username, password=password)
|
||||
if user is not None:
|
||||
# login saves the user’s ID in the session,
|
||||
# using Django’s session framework.
|
||||
login(request, user)
|
||||
serializer = TokenSerializer(data={
|
||||
# using drf jwt utility functions to generate a token
|
||||
"token": jwt_encode_handler(
|
||||
jwt_payload_handler(user)
|
||||
)})
|
||||
serializer.is_valid()
|
||||
return Response(serializer.data)
|
||||
return Response(status=status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
|
||||
class RegisterUsers(generics.CreateAPIView):
|
||||
"""
|
||||
POST auth/register/
|
||||
"""
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
logger.error('post registerUsers')
|
||||
username = request.data.get("username", "")
|
||||
password = request.data.get("password", "")
|
||||
email = request.data.get("email", "")
|
||||
if not username and not password and not email:
|
||||
return Response(
|
||||
data={
|
||||
"message": "username, password and email is required to register a user"
|
||||
},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
new_user = User.objects.create_user(
|
||||
username=username, password=password, email=email
|
||||
)
|
||||
return Response(
|
||||
data=UserSerializer(new_user).data,
|
||||
status=status.HTTP_201_CREATED
|
||||
)
|
Reference in New Issue
Block a user