Commit 428a450f authored by aurellesia's avatar aurellesia

relasi user

parent cf963253
...@@ -73,6 +73,12 @@ TEMPLATES = [ ...@@ -73,6 +73,12 @@ TEMPLATES = [
WSGI_APPLICATION = 'main.wsgi.application' WSGI_APPLICATION = 'main.wsgi.application'
# Rest Framework
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS' : 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE' : 10
}
# Database # Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases # https://docs.djangoproject.com/en/4.0/ref/settings/#databases
......
...@@ -19,3 +19,7 @@ from django.urls import path, include ...@@ -19,3 +19,7 @@ from django.urls import path, include
urlpatterns = [ urlpatterns = [
path('', include('master.urls')), path('', include('master.urls')),
] ]
urlpatterns += [
path('api-auth/', include('rest_framework.urls')),
]
# Generated by Django 4.0.4 on 2022-04-21 06:33
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('master', '0002_alter_gymclass_capacity'),
]
operations = [
migrations.AddField(
model_name='gymclass',
name='owner',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='gym_class', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='gymclass',
name='name',
field=models.CharField(blank=True, default='', max_length=100),
),
]
...@@ -5,6 +5,7 @@ class GymClass(models.Model): ...@@ -5,6 +5,7 @@ class GymClass(models.Model):
date = models.DateTimeField() date = models.DateTimeField()
capacity = models.IntegerField() capacity = models.IntegerField()
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey('auth.User', null=True, related_name='gym_class', on_delete=models.CASCADE)
class Meta: class Meta:
ordering = ['created'] ordering = ['created']
\ No newline at end of file
from rest_framework import permissions
class IsOwnerOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
# Write permissions are only allowed to the owner of the gym class.
return obj.owner == request.user
\ No newline at end of file
from rest_framework import serializers from rest_framework import serializers
from master.models import GymClass from master.models import GymClass
class GymClassSerializer(serializers.ModelSerializer): class GymClassSerializer(serializers.HyperlinkedModelSerializer):
# id = serializers.IntegerField(read_only=True) owner = serializers.ReadOnlyField(source='owner.username')
# name = serializers.CharField(required=False, allow_blank=True, max_length=100)
# date = serializers.DateTimeField()
# capacity = serializers.IntegerField()
#
# def create(self, validated_data):
# return GymClass.objects.create(**validated_data)
#
# def update(self, instance, validated_data):
# instance.name = validated_data.get('name', instance.name)
# instance.date = validated_data.get('date', instance.date)
# instance.capacity = validated_data.get('capacity', instance.capacity)
# instance.save()
#
# return instance
class Meta: class Meta:
model = GymClass model = GymClass
fields = ['id', 'name', 'date', 'capacity'] fields = ['id', 'name', 'date', 'capacity', 'owner']
\ No newline at end of file \ No newline at end of file
from django.contrib.auth.models import User
from rest_framework import serializers
from master.models.gymClass import GymClass
class UserSerializer(serializers.ModelSerializer):
gym_class = serializers.PrimaryKeyRelatedField(many=True, queryset=GymClass.objects.all())
class Meta:
model = User
fields = ['id', 'username', 'gym_class']
\ No newline at end of file
from django.urls import path from django.urls import path, include
from .views.gym_class import gym_class_list, gym_class_detail from .views.gym_class import GymClassViewSet, api_root
from .views.user import UserViewSet
from rest_framework.urlpatterns import format_suffix_patterns
from rest_framework.routers import DefaultRouter
gym_class_list = GymClassViewSet.as_view({
'get' : 'list',
'post' : 'create'
})
gym_class_detail = GymClassViewSet.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})
user_list = UserViewSet.as_view({
'get': 'list'
})
user_detail = UserViewSet.as_view({
'get': 'retrieve'
})
urlpatterns = [ urlpatterns = [
path('gym_class/', gym_class_list), path('gym_class/', gym_class_list, name='gym-class-list'),
path('gym_class/<int:pk>/', gym_class_detail), path('gym_class/<int:pk>/', gym_class_detail, name='gym-class-detail'),
] path('users/', user_list, name='user-list'),
\ No newline at end of file path('users/<int:pk>/', user_detail, name='user-detail'),
]
urlpatterns = format_suffix_patterns(urlpatterns)
# router = DefaultRouter()
# router.register(r'gym_class', GymClassViewSet, basename='gym_class')
# router.register(r'users', UserViewSet, basename='users')
#
# urlpatterns = [
# path('', include(router.urls))
# ]
\ No newline at end of file
from django.http import HttpResponse, JsonResponse from rest_framework.decorators import api_view, action
from django.views.decorators.csrf import csrf_exempt from rest_framework.response import Response
from rest_framework.decorators import api_view from rest_framework.reverse import reverse
from rest_framework.parsers import JSONParser
from master.models import GymClass from master.models import GymClass
from master.permissions import IsOwnerOrReadOnly
from master.serializers.GymClassSerializer import GymClassSerializer from master.serializers.GymClassSerializer import GymClassSerializer
from rest_framework import generics, viewsets
from rest_framework import permissions
@csrf_exempt class GymClassViewSet(viewsets.ModelViewSet):
@api_view(['GET', 'POST']) queryset = GymClass.objects.all()
def gym_class_list(request): serializer_class = GymClassSerializer
if request.method == 'GET': permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly]
gym_class = GymClass.objects.all()
serializer = GymClassSerializer(gym_class, many=True)
return JsonResponse(serializer.data, safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = GymClassSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
@csrf_exempt
@api_view(['GET', 'PUT', 'DELETE'])
def gym_class_detail(request, pk):
try:
gym_class = GymClass.objects.get(pk=pk)
except GymClass.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = GymClassSerializer(gym_class)
return JsonResponse(serializer.data)
elif request.method == 'PUT': # @action(detail=True, methods=['post'])
data = JSONParser().parse(request) # def perform_create(self, serializer):
serializer = GymClassSerializer(gym_class, data=data) # serializer.save(owner=self.request.user)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
elif request.method == 'DELETE': @api_view(['GET'])
gym_class.delete() def api_root(request, format=None):
return HttpResponse(status=204) return Response({
\ No newline at end of file 'users' : reverse('user-list', request=request, format=format),
'gym_class' : reverse('gym-class-list', request=request, format=format)
})
\ No newline at end of file
from django.contrib.auth.models import User
from rest_framework import generics, viewsets
from master.serializers.UserSerializer import UserSerializer
# class UserList(generics.ListAPIView):
# queryset = User.objects.all()
# serializer_class = UserSerializer
#
# class UserDetail(generics.RetrieveAPIView):
# queryset = User.objects.all()
# serializer_class = UserSerializer
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment