First commit of the V2.

New base, new info.
This commit is contained in:
2019-04-18 00:58:59 +02:00
parent 698b6dd865
commit 31d5f7ade4
185 changed files with 32824 additions and 0 deletions

149
music/views.py Normal file
View 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 users ID in the session,
# using Djangos 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
)