Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Clark Lin
django101
Commits
f36e7f0f
Commit
f36e7f0f
authored
Jun 04, 2024
by
Administrator
Browse files
added CBV class-based views.
parent
e2a6de98
Changes
2
Hide whitespace changes
Inline
Side-by-side
my_app/urls.py
View file @
f36e7f0f
from
django.urls
import
path
from
django.urls
import
path
from
.views
import
DemoUsersListCreateView
,
DemoUsersRetrieveUpdateDestroyView
# from .views import DemoUsersListCreateView, DemoUsersRetrieveUpdateDestroyView
from
my_app
import
views
urlpatterns
=
[
urlpatterns
=
[
path
(
'demo_user/'
,
DemoUsersListCreateView
.
as_view
(),
name
=
'list_demo_user'
),
# CBV
path
(
'demo_user/<int:pk>/'
,
DemoUsersRetrieveUpdateDestroyView
.
as_view
(),
name
=
'edit_demo_user'
),
path
(
'cbv/demo_user/'
,
views
.
DemoUserList
.
as_view
(),
name
=
'CBV List User'
),
path
(
'cbv/demo_user/<int:pk>/'
,
views
.
DemoUserDetail
.
as_view
(),
name
=
'CBV Detail User'
),
# GCBV
path
(
'gcbv/demo_user/'
,
views
.
DemoUsersListCreateView
.
as_view
(),
name
=
'list_demo_user'
),
path
(
'gcbv/demo_user/<int:pk>/'
,
views
.
DemoUsersRetrieveUpdateDestroyView
.
as_view
(),
name
=
'edit_demo_user'
),
]
]
my_app/views.py
View file @
f36e7f0f
# from django.shortcuts import render
# from django.shortcuts import render
# Create your views here.
# Import custom model and serializer
from
rest_framework
import
generics
from
.models
import
DemoUsers
from
.models
import
DemoUsers
from
.serializers
import
DemoUsersSerializer
from
.serializers
import
DemoUsersSerializer
# Import for GCBV
from
rest_framework
import
generics
from
rest_framework.permissions
import
IsAuthenticated
from
rest_framework.permissions
import
IsAuthenticated
from
django.http
import
Http404
# Import for CBV
from
rest_framework.views
import
APIView
from
rest_framework.response
import
Response
from
rest_framework
import
status
"""
CBV - Class based views
"""
# Used to query multiple items or create new item
class
DemoUserList
(
APIView
):
# Query all items
def
get
(
self
,
request
,
format
=
None
):
demo_users
=
DemoUsers
.
objects
.
all
()
serializer
=
DemoUsersSerializer
(
demo_users
,
many
=
True
)
return
Response
(
serializer
.
data
)
# Create new item
def
post
(
self
,
request
,
format
=
None
):
serializer
=
DemoUsersSerializer
(
data
=
request
.
data
)
if
serializer
.
is_valid
():
serializer
.
save
(
created_by
=
self
.
request
.
user
.
username
)
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
)
else
:
return
Response
(
serializer
.
errors
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
# Override get_serializer to show correct payload in API document
def
get_serializer
(
self
):
return
DemoUsersSerializer
()
# Used to query/update/delete single item
class
DemoUserDetail
(
APIView
):
# Implementation of get single item
def
get_object
(
self
,
pk
):
try
:
return
DemoUsers
.
objects
.
get
(
pk
=
pk
)
except
DemoUsers
.
DoesNotExist
:
raise
Http404
# Get single item
def
get
(
self
,
request
,
pk
,
format
=
None
):
demoUser
=
self
.
get_object
(
pk
)
serializer
=
DemoUsersSerializer
(
demoUser
)
return
Response
(
serializer
.
data
)
# Update single item
def
put
(
self
,
request
,
pk
,
format
=
None
):
demoUser
=
self
.
get_object
(
pk
)
serializer
=
DemoUsersSerializer
(
demoUser
,
data
=
request
.
data
)
if
serializer
.
is_valid
():
serializer
.
save
(
last_updated_by
=
self
.
request
.
user
.
username
)
return
Response
(
serializer
.
data
)
else
:
return
Response
(
serializer
.
errors
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
# Update partial single item
def
patch
(
self
,
request
,
pk
,
format
=
None
):
demoUser
=
self
.
get_object
(
pk
)
serializer
=
DemoUsersSerializer
(
demoUser
,
data
=
request
.
data
,
partial
=
True
)
if
serializer
.
is_valid
():
serializer
.
save
(
last_updated_by
=
self
.
request
.
user
.
username
)
return
Response
(
serializer
.
data
)
else
:
return
Response
(
serializer
.
errors
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
# Delete single item
def
delete
(
self
,
request
,
pk
,
format
=
None
):
demoUser
=
self
.
get_object
(
pk
)
demoUser
.
delete
()
return
Response
(
status
=
status
.
HTTP_204_NO_CONTENT
)
# Override get_serializer to show correct payload in API document
def
get_serializer
(
self
):
return
DemoUsersSerializer
()
class
DemoUsersListCreateView
(
generics
.
ListCreateAPIView
):
class
DemoUsersListCreateView
(
generics
.
ListCreateAPIView
):
queryset
=
DemoUsers
.
objects
.
all
()
queryset
=
DemoUsers
.
objects
.
all
()
...
@@ -13,7 +92,6 @@ class DemoUsersListCreateView(generics.ListCreateAPIView):
...
@@ -13,7 +92,6 @@ class DemoUsersListCreateView(generics.ListCreateAPIView):
permission_classes
=
(
IsAuthenticated
,)
permission_classes
=
(
IsAuthenticated
,)
def
perform_create
(
self
,
serializer
):
def
perform_create
(
self
,
serializer
):
print
(
'user type in creation:'
,
type
(
self
.
request
.
user
))
serializer
.
save
(
created_by
=
self
.
request
.
user
.
username
)
serializer
.
save
(
created_by
=
self
.
request
.
user
.
username
)
class
DemoUsersRetrieveUpdateDestroyView
(
generics
.
RetrieveUpdateDestroyAPIView
):
class
DemoUsersRetrieveUpdateDestroyView
(
generics
.
RetrieveUpdateDestroyAPIView
):
...
@@ -22,5 +100,4 @@ class DemoUsersRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
...
@@ -22,5 +100,4 @@ class DemoUsersRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
permission_classes
=
(
IsAuthenticated
,)
permission_classes
=
(
IsAuthenticated
,)
def
perform_update
(
self
,
serializer
):
def
perform_update
(
self
,
serializer
):
print
(
'user type in update:'
,
type
(
self
.
request
.
user
))
serializer
.
save
(
last_updated_by
=
self
.
request
.
user
.
username
)
serializer
.
save
(
last_updated_by
=
self
.
request
.
user
.
username
)
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