Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
G
Gym Project
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aurellesia
Gym Project
Commits
428a450f
Commit
428a450f
authored
Apr 22, 2022
by
aurellesia
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
relasi user
parent
cf963253
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
133 additions
and
64 deletions
+133
-64
settings.py
main/settings.py
+6
-0
urls.py
main/urls.py
+4
-0
0003_gymclass_owner_alter_gymclass_name.py
master/migrations/0003_gymclass_owner_alter_gymclass_name.py
+26
-0
gymClass.py
master/models/gymClass.py
+1
-0
permissions.py
master/permissions.py
+9
-0
GymClassSerializer.py
master/serializers/GymClassSerializer.py
+3
-17
UserSerializer.py
master/serializers/UserSerializer.py
+11
-0
urls.py
master/urls.py
+38
-5
gym_class.py
master/views/gym_class.py
+20
-42
user.py
master/views/user.py
+15
-0
No files found.
main/settings.py
View file @
428a450f
...
...
@@ -73,6 +73,12 @@ TEMPLATES = [
WSGI_APPLICATION
=
'main.wsgi.application'
# Rest Framework
REST_FRAMEWORK
=
{
'DEFAULT_PAGINATION_CLASS'
:
'rest_framework.pagination.PageNumberPagination'
,
'PAGE_SIZE'
:
10
}
# Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
...
...
main/urls.py
View file @
428a450f
...
...
@@ -19,3 +19,7 @@ from django.urls import path, include
urlpatterns
=
[
path
(
''
,
include
(
'master.urls'
)),
]
urlpatterns
+=
[
path
(
'api-auth/'
,
include
(
'rest_framework.urls'
)),
]
master/migrations/0003_gymclass_owner_alter_gymclass_name.py
0 → 100644
View file @
428a450f
# 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
),
),
]
master/models/gymClass.py
View file @
428a450f
...
...
@@ -5,6 +5,7 @@ class GymClass(models.Model):
date
=
models
.
DateTimeField
()
capacity
=
models
.
IntegerField
()
created
=
models
.
DateTimeField
(
auto_now_add
=
True
)
owner
=
models
.
ForeignKey
(
'auth.User'
,
null
=
True
,
related_name
=
'gym_class'
,
on_delete
=
models
.
CASCADE
)
class
Meta
:
ordering
=
[
'created'
]
\ No newline at end of file
master/permissions.py
0 → 100644
View file @
428a450f
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
master/serializers/GymClassSerializer.py
View file @
428a450f
from
rest_framework
import
serializers
from
master.models
import
GymClass
class
GymClassSerializer
(
serializers
.
ModelSerializer
):
# id = serializers.IntegerField(read_only=True)
# 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
GymClassSerializer
(
serializers
.
HyperlinkedModelSerializer
):
owner
=
serializers
.
ReadOnlyField
(
source
=
'owner.username'
)
class
Meta
:
model
=
GymClass
fields
=
[
'id'
,
'name'
,
'date'
,
'capacity'
]
\ No newline at end of file
fields
=
[
'id'
,
'name'
,
'date'
,
'capacity'
,
'owner'
]
\ No newline at end of file
master/serializers/UserSerializer.py
0 → 100644
View file @
428a450f
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
master/urls.py
View file @
428a450f
from
django.urls
import
path
from
.views.gym_class
import
gym_class_list
,
gym_class_detail
from
django.urls
import
path
,
include
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
=
[
path
(
'gym_class/'
,
gym_class_list
),
path
(
'gym_class/<int:pk>/'
,
gym_class_detail
),
]
\ No newline at end of file
path
(
'gym_class/'
,
gym_class_list
,
name
=
'gym-class-list'
),
path
(
'gym_class/<int:pk>/'
,
gym_class_detail
,
name
=
'gym-class-detail'
),
path
(
'users/'
,
user_list
,
name
=
'user-list'
),
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
master/views/gym_class.py
View file @
428a450f
from
django.http
import
HttpResponse
,
JsonResponse
from
django.views.decorators.csrf
import
csrf_exempt
from
rest_framework.
decorators
import
api_view
from
rest_framework.parsers
import
JSONParser
from
rest_framework.decorators
import
api_view
,
action
from
rest_framework.response
import
Response
from
rest_framework.
reverse
import
reverse
from
master.models
import
GymClass
from
master.permissions
import
IsOwnerOrReadOnly
from
master.serializers.GymClassSerializer
import
GymClassSerializer
from
rest_framework
import
generics
,
viewsets
from
rest_framework
import
permissions
@
csrf_exempt
@
api_view
([
'GET'
,
'POST'
])
def
gym_class_list
(
request
):
if
request
.
method
==
'GET'
:
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
)
class
GymClassViewSet
(
viewsets
.
ModelViewSet
):
queryset
=
GymClass
.
objects
.
all
()
serializer_class
=
GymClassSerializer
permission_classes
=
[
permissions
.
IsAuthenticatedOrReadOnly
,
IsOwnerOrReadOnly
]
elif
request
.
method
==
'PUT'
:
data
=
JSONParser
()
.
parse
(
request
)
serializer
=
GymClassSerializer
(
gym_class
,
data
=
data
)
if
serializer
.
is_valid
():
serializer
.
save
()
return
JsonResponse
(
serializer
.
data
)
return
JsonResponse
(
serializer
.
errors
,
status
=
400
)
# @action(detail=True, methods=['post'])
# def perform_create(self, serializer):
# serializer.save(owner=self.request.user)
elif
request
.
method
==
'DELETE'
:
gym_class
.
delete
()
return
HttpResponse
(
status
=
204
)
\ No newline at end of file
@
api_view
([
'GET'
])
def
api_root
(
request
,
format
=
None
):
return
Response
({
'users'
:
reverse
(
'user-list'
,
request
=
request
,
format
=
format
),
'gym_class'
:
reverse
(
'gym-class-list'
,
request
=
request
,
format
=
format
)
})
\ No newline at end of file
master/views/user.py
0 → 100644
View file @
428a450f
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment