Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
perpus
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
Fahmi
perpus
Commits
6fe4d040
Commit
6fe4d040
authored
Jan 11, 2024
by
Fahmi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit ke 3
parent
4261cddf
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
311 additions
and
198 deletions
+311
-198
serializers.py
api/serializers.py
+12
-1
views.py
api/views.py
+2
-19
views.py
library/views.py
+297
-178
No files found.
api/serializers.py
View file @
6fe4d040
...
...
@@ -2,6 +2,7 @@ from library.models import *
from
.models
import
*
from
rest_framework
import
serializers
from
django.contrib.auth
import
authenticate
,
get_user_model
from
datetime
import
date
class
UserLoginSerializer
(
serializers
.
Serializer
):
username
=
serializers
.
CharField
()
...
...
@@ -99,11 +100,21 @@ class BookLoanSerializer(serializers.ModelSerializer):
fields
=
'__all__'
class
OverdueLoanSerializer
(
serializers
.
ModelSerializer
):
days_over
=
serializers
.
SerializerMethodField
()
class
Meta
:
model
=
BookLoan
fields
=
'__all__'
def
get_days_over
(
self
,
obj
):
return
(
date
.
today
()
-
obj
.
due_date
)
.
days
class
NearOutstandingLoanSerializer
(
serializers
.
ModelSerializer
):
days_left
=
serializers
.
SerializerMethodField
()
class
Meta
:
model
=
BookLoan
fields
=
'__all__'
\ No newline at end of file
fields
=
'__all__'
def
get_days_left
(
self
,
obj
):
return
(
obj
.
due_date
-
date
.
today
())
.
days
\ No newline at end of file
api/views.py
View file @
6fe4d040
...
...
@@ -28,29 +28,12 @@ class MyPageNumberPagination(PageNumberPagination):
#regist librarian
class
LibrarianRegistrationAPIView
(
generics
.
CreateAPIView
):
queryset
=
CustomUser
.
objects
.
all
()
serializer_class
=
Member
RegistrationSerializer
serializer_class
=
Librarian
RegistrationSerializer
#regist member
class
MemberRegistrationAPIView
(
generics
.
ListCreateAPIView
):
queryset
=
CustomUser
.
objects
.
all
()
serializer_class
=
MemberRegistrationSerializer
# def create(self, request, *args, **kwargs):
# serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True)
# user = serializer.save(is_member=True)
# login(request, user)
# response_data = {
# 'message': 'Member registered successfully',
# 'user_id': user.id,
# 'username': user.username,
# 'email': user.email,
# 'is_member': user.is_member,
# }
# return Response(response_data, status=status.HTTP_201_CREATED)
#login member
class
MemberLoginView
(
APIView
):
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
...
...
@@ -273,7 +256,7 @@ class NearOutstandingLoansAPIView(APIView):
def
get
(
self
,
request
,
format
=
None
):
tomorrow
=
date
.
today
()
+
timedelta
(
days
=
1
)
near_outstanding_loans
=
tomorrow
+
timedelta
(
days
=
2
)
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorrow
,
due_date__lte
=
near_outstanding_loans
)
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorrow
,
due_date__lte
=
near_outstanding_loans
,
is_returned
=
False
)
near_outstanding_loans
=
near_date
.
annotate
(
time_difference
=
ExpressionWrapper
(
...
...
library/views.py
View file @
6fe4d040
from
django.conf
import
settings
from
django.forms.models
import
BaseModelForm
from
django.shortcuts
import
render
,
redirect
,
get_object_or_404
from
django.contrib.auth
import
authenticate
,
login
from
django.contrib.auth
import
authenticate
,
login
,
update_session_auth_hash
from
django.contrib.auth.views
import
LogoutView
from
django.contrib.auth.decorators
import
login_required
from
django.contrib.auth.models
import
User
from
django.utils.decorators
import
method_decorator
# from django.contrib.auth.models import CustomUser
from
datetime
import
date
,
timedelta
from
django.db.models
import
F
,
ExpressionWrapper
,
fields
from
django.urls
import
reverse_lazy
from
.forms
import
*
from
.models
import
Book
,
Member
,
BookLoan
,
Librarian
,
LoginHistory
from
.models
import
*
from
django.views.generic
import
*
from
.mixins
import
LibrarianRequiredMixin
from
rest_framework.pagination
import
PageNumberPagination
from
django.contrib.auth.forms
import
AuthenticationForm
from
django.contrib
import
messages
from
django.contrib.auth.decorators
import
permission_required
from
.decorators
import
librarian_required
#pagination
class
MyPageNumberPagination
(
PageNumberPagination
):
page_size
=
5
page_size_query_param
=
'page_size'
# Create your views here.
def
homepage
(
request
):
return
render
(
request
,
'homepage.html'
)
def
login_view
(
request
):
login_form
=
LoginForm
()
if
request
.
method
==
'POST'
:
login_form
=
LoginForm
(
request
.
POST
)
if
login_form
.
is_valid
():
username
=
login_form
.
cleaned_data
[
'username'
]
password
=
login_form
.
cleaned_data
[
'password'
]
user
=
authenticate
(
request
,
username
=
username
,
password
=
password
)
if
user
is
not
None
and
user
.
is_active
:
login
(
request
,
user
)
return
redirect
(
'dashboard'
)
else
:
login_form
.
add_error
(
None
,
'Invalid username or password'
)
return
render
(
request
,
'login.html'
,
{
'login_form'
:
login_form
})
def
register_view
(
request
):
#librarian Regist
def
librarian_registration
(
request
):
if
request
.
method
==
'POST'
:
user_form
=
userCreat
(
request
.
POST
)
librarian_form
=
LibrarianForm
(
request
.
POST
)
if
user_form
.
is_valid
()
and
librarian_form
.
is_valid
():
user
=
user_form
.
save
()
librarian
=
librarian_form
.
save
(
commit
=
False
)
librarian
.
user
=
user
librarian
.
save
()
return
redirect
(
'login'
)
form
=
LibrarianRegistrationForm
(
request
.
POST
)
if
form
.
is_valid
():
user
=
form
.
save
(
commit
=
False
)
user
.
set_password
(
form
.
cleaned_data
[
'password1'
])
user
.
save
()
return
redirect
(
'login'
)
# Redirect to librarian dashboard or another page
else
:
user_form
=
UserCreationForm
()
librarian_form
=
LibrarianForm
()
context
=
{
'user_form'
:
user_form
,
'librarian_form'
:
librarian_form
}
form
=
LibrarianRegistrationForm
()
return
render
(
request
,
'
register.html'
,
context
)
return
render
(
request
,
'
librarian_registration.html'
,
{
'form'
:
form
}
)
@
login_required
def
dashboard
(
request
):
return
render
(
request
,
'dashboard.html'
)
@
login_required
class
CustomLogoutView
(
LogoutView
):
next_page
=
'homepage'
@
login_required
def
book_list
(
request
):
books
=
Book
.
objects
.
all
()
return
render
(
request
,
'book_list.html'
,
{
'books'
:
books
})
@
login_required
def
book_new
(
request
):
#Login
def
Login
(
request
):
if
request
.
method
==
'POST'
:
form
=
BookForm
(
request
.
POST
)
form
=
CustomAuthenticationForm
(
request
,
data
=
request
.
POST
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
'book_list'
)
username
=
form
.
cleaned_data
[
'username'
]
password
=
form
.
cleaned_data
[
'password'
]
user
=
authenticate
(
request
,
username
=
username
,
password
=
password
)
if
user
is
not
None
:
login
(
request
,
user
)
return
redirect
(
'dashboard'
)
else
:
form
=
BookForm
()
return
render
(
request
,
'book_new.html'
,
{
'form'
:
form
})
form
=
AuthenticationForm
()
@
login_required
def
book_update
(
request
,
id
):
context
=
{}
book
=
get_object_or_404
(
Book
,
id
=
id
)
form
=
BookForm
(
instance
=
book
)
context
[
'book'
]
=
book
return
render
(
request
,
'login.html'
,
{
'form'
:
form
})
#member regist
def
member_registration
(
request
):
if
request
.
method
==
'POST'
:
form
=
BookForm
(
request
.
POST
,
instance
=
book
)
form
=
MemberRegistrationForm
(
request
.
POST
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
'book_list'
)
user
=
form
.
save
(
commit
=
False
)
user
.
is_member
=
True
user
.
save
()
return
redirect
(
'login'
)
# Redirect to member dashboard or another page
else
:
form
=
BookForm
(
instance
=
book
)
context
[
'form'
]
=
form
form
=
MemberRegistrationForm
()
return
render
(
request
,
'
book_update.html'
,
context
)
return
render
(
request
,
'
member_registration.html'
,
{
'form'
:
form
}
)
@
login_required
def
book_delete
(
request
,
id
):
book
=
get_object_or_404
(
Book
,
id
=
id
)
book
.
delete
()
return
redirect
(
'book_list'
)
def
dashboard
(
request
):
return
render
(
request
,
'dashboard.html'
)
@
l
ogi
n_required
@
l
ibraria
n_required
def
member_list
(
request
):
members
=
Member
.
objects
.
all
()
return
render
(
request
,
'member_list.html'
,
{
'members'
:
members
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
member_new
(
request
):
if
request
.
method
==
'POST'
:
form
=
MemberForm
(
request
.
POST
)
...
...
@@ -121,7 +95,7 @@ def member_new(request):
form
=
MemberForm
()
return
render
(
request
,
'member_new.html'
,
{
'form'
:
form
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
edit_member
(
request
,
id
):
context
=
{}
member
=
get_object_or_404
(
Member
,
id
=
id
)
...
...
@@ -139,18 +113,64 @@ def edit_member(request, id):
context
[
'form'
]
=
form
return
render
(
request
,
'member_update.html'
,
context
)
@
l
ogi
n_required
@
l
ibraria
n_required
def
delete_member
(
request
,
id
):
member
=
get_object_or_404
(
Member
,
id
=
id
)
member
.
delete
()
return
redirect
(
'member_list'
)
@
login_required
@
librarian_required
def
librarian_list
(
request
):
librarian
=
Librarian
.
objects
.
all
()
return
render
(
request
,
'librarian_list.html'
,
{
'librarian'
:
librarian
})
@
librarian_required
def
librarian_new
(
request
):
if
request
.
method
==
'POST'
:
form
=
LibrarianForm
(
request
.
POST
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
'librarian_list'
)
else
:
form
=
LibrarianForm
()
return
render
(
request
,
'librarian_new.html'
,
{
'form'
:
form
})
@
librarian_required
def
librarian_update
(
request
,
id
):
context
=
{}
librarian
=
get_object_or_404
(
Librarian
,
id
=
id
)
form
=
LibrarianForm
(
instance
=
librarian
)
context
[
'librarian'
]
=
librarian
if
request
.
method
==
'POST'
:
form
=
LibrarianForm
(
request
.
POST
,
instance
=
librarian
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
librarian_list
)
else
:
form
=
LibrarianForm
(
instance
=
librarian
)
context
[
'form'
]
=
form
return
render
(
request
,
'librarian_update.html'
,
context
)
@
librarian_required
def
librarian_delete
(
request
,
pk
):
librarian
=
Librarian
.
objects
.
get
(
pk
=
pk
)
librarian
.
user
.
delete
()
librarian
.
delete
()
return
redirect
(
'librarian_list'
)
@
librarian_required
def
librarian_login_history
(
request
):
login_history
=
LoginHistory
.
objects
.
all
()
return
render
(
request
,
'librarian_login_history.html'
,
{
'login_history'
:
login_history
})
@
librarian_required
def
book_loan_list
(
request
):
book_loan
=
BookLoan
.
objects
.
all
()
return
render
(
request
,
'book_loan_list.html'
,
{
'book_loan'
:
book_loan
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
book_loan_new
(
request
):
members
=
Member
.
objects
.
all
()
books
=
Book
.
objects
.
all
()
...
...
@@ -163,7 +183,7 @@ def book_loan_new(request):
form
=
BookLoanForm
()
return
render
(
request
,
'book_loan_new.html'
,
{
'form'
:
form
,
'members'
:
members
,
'books'
:
books
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
book_loan_update
(
request
,
id
):
context
=
{}
...
...
@@ -183,13 +203,30 @@ def book_loan_update(request, id):
return
render
(
request
,
'book_loan_update.html'
,
context
)
@
l
ogi
n_required
@
l
ibraria
n_required
def
book_loan_delete
(
request
,
id
):
book_loan
=
get_object_or_404
(
BookLoan
,
id
=
id
)
book_loan
.
delete
()
return
redirect
(
'book_loan_list'
)
@
login_required
@
librarian_required
def
near_outstanding_loans
(
request
):
tomorow
=
date
.
today
()
+
timedelta
(
days
=
1
)
near_outstanding_loans
=
tomorow
+
timedelta
(
days
=
2
)
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorow
,
due_date__lte
=
near_outstanding_loans
,
is_returned
=
False
)
near_outstanding_loans
=
near_date
.
annotate
(
time_difference
=
ExpressionWrapper
(
F
(
'due_date'
)
-
date
.
today
(),
output_field
=
fields
.
DurationField
()
)
)
context
=
{
'near_outstanding_loan'
:
near_outstanding_loans
}
return
render
(
request
,
'near_outstanding_loans.html'
,
context
)
@
librarian_required
def
overdue_loans
(
request
):
overdue_loans
=
BookLoan
.
objects
.
filter
(
due_date__lte
=
date
.
today
())
...
...
@@ -200,125 +237,207 @@ def overdue_loans(request):
)
)
.
exclude
(
is_returned
=
True
)
for
loan
in
over_due
:
loan
.
dead
=
abs
(
loan
.
dead
.
days
)
context
=
{
'over_due'
:
over_due
,
}
return
render
(
request
,
'overdue_loans.html'
,
context
)
@
login_required
def
near_outstanding_loans
(
request
):
tomorow
=
date
.
today
()
+
timedelta
(
days
=
1
)
near_outstanding_loans
=
tomorow
+
timedelta
(
days
=
2
)
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorow
,
due_date__lte
=
near_outstanding_loans
)
near_outstanding_loans
=
near_date
.
annotate
(
time_difference
=
ExpressionWrapper
(
F
(
'due_date'
)
-
date
.
today
(),
output_field
=
fields
.
DurationField
()
)
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookList
(
ListView
):
model
=
Book
template_name
=
"book_list.html"
context_object_name
=
'books'
pagination_class
=
MyPageNumberPagination
context
=
{
'near_outstanding_loan'
:
near_outstanding_loans
}
return
render
(
request
,
'near_outstanding_loans.html'
,
context
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookDetail
(
DetailView
):
model
=
Book
template_name
=
'book_detail.html'
@
login_required
def
librarian_list
(
request
):
librarian
=
Librarian
.
objects
.
all
()
return
render
(
request
,
'librarian_list.html'
,
{
'librarian'
:
librarian
})
@
method_decorator
(
librarian_required
,
name
=
'dispatch'
)
class
BookCreateView
(
View
):
template_name
=
'book_new.html'
@
login_required
def
librarian_new
(
request
):
if
request
.
method
==
'POST'
:
user_form
=
userCreat
(
request
.
POST
)
librarian_form
=
LibrarianForm
(
request
.
POST
)
if
user_form
.
is_valid
()
and
librarian_form
.
is_valid
():
user
=
user_form
.
save
()
librarian
=
librarian_form
.
save
(
commit
=
False
)
librarian
.
user
=
user
librarian
.
save
()
return
redirect
(
'librarian_list'
)
else
:
user_form
=
UserCreationForm
()
librarian_form
=
LibrarianForm
()
context
=
{
'user_form'
:
user_form
,
'librarian_form'
:
librarian_form
}
return
render
(
request
,
'librarian_new.html'
,
context
)
# @login_required
# def librarian_update(request, pk):
# context = {}
# librarian = Librarian.objects.get(pk=pk)
# context['librarian'] = librarian
# if request.method == 'POST':
# form = LibrarianForm(request.POST, instance=librarian)
# if form.is_valid():
# form.save()
# return redirect('librarian_list')
# else:
# form = LibrarianForm(instance=librarian)
# get category list
def
get
(
self
,
request
):
category
=
Category
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'category'
:
category
})
# context['form'] = form
#form new book
def
post
(
self
,
request
):
form
=
BookForm
(
request
.
POST
,
request
.
FILES
)
form
.
save
()
return
redirect
(
'book-list'
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookUpdateView
(
LibrarianRequiredMixin
,
UpdateView
):
template_name
=
'book_update.html'
#get
def
get
(
self
,
request
,
pk
):
book
=
get_object_or_404
(
Book
,
pk
=
pk
)
category
=
Category
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'book'
:
book
,
'category'
:
category
})
# form update book
def
post
(
self
,
request
,
pk
):
book
=
get_object_or_404
(
Book
,
pk
=
pk
)
form
=
BookForm
(
request
.
POST
,
request
.
FILES
,
instance
=
book
)
form
.
save
()
return
redirect
(
'book-list'
)
@
librarian_required
def
book_delete
(
request
,
id
):
book
=
get_object_or_404
(
Book
,
id
=
id
)
book
.
delete
()
return
redirect
(
'book-list'
)
# return render(request, 'librarian_update.html', context)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookDeleteView
(
LibrarianRequiredMixin
,
DeleteView
):
model
=
Book
template_name
=
'book_delete.html'
success_url
=
reverse_lazy
(
'book-list'
)
def
librarian_update
(
request
,
pk
):
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
CategoryListView
(
ListView
):
model
=
Category
template_name
=
'category_list.html'
context_object_name
=
'categories'
librarian
=
get_object_or_404
(
librarian
,
pk
=
pk
)
librarian_form
=
LibrarianUpdateForm
(
instance
=
librarian
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
CategoryCreateView
(
LibrarianRequiredMixin
,
CreateView
):
model
=
Category
form_class
=
CategoryForm
template_name
=
'category_new.html'
success_url
=
reverse_lazy
(
'category_list'
)
# Adjust the success URL as needed
if
request
.
method
==
'POST'
:
user_form
=
LibrarianUpdateForm
(
request
.
POST
,
instance
=
librarian
.
user
)
librarian_form
=
LibrarianUpdateForm
(
request
.
POST
,
instance
=
librarian
)
def
form_valid
(
self
,
form
)
:
form
.
instance
.
owner
=
self
.
request
.
user
return
super
()
.
form_valid
(
form
)
if
user_form
.
is_valid
()
and
librarian_form
.
is_valid
():
user_form
.
save
()
librarian_form
.
save
()
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
CategoryUpdateView
(
LibrarianRequiredMixin
,
UpdateView
):
model
=
Category
form_class
=
CategoryForm
template_name
=
'category_update.html'
context_object_name
=
'categories'
success_url
=
reverse_lazy
(
'category_list'
)
# Adjust the success URL as needed
return
redirect
(
'librarian_list'
)
def
form_valid
(
self
,
form
):
form
.
instance
.
owner
=
self
.
request
.
user
return
super
()
.
form_valid
(
form
)
@
login_required
def
userchange_password
(
request
):
if
request
.
method
==
'POST'
:
old_password
=
request
.
POST
.
get
(
'old_password'
)
new_password
=
request
.
POST
.
get
(
'new_password'
)
confirm_password
=
request
.
POST
.
get
(
'confirm_password'
)
# Ensure that new password and confirm password match
if
new_password
!=
confirm_password
:
messages
.
error
(
request
,
'New password and confirm password do not match.'
)
return
render
(
request
,
'update_password.html'
)
# Authenticate the user
user
=
authenticate
(
request
,
username
=
request
.
user
.
username
,
password
=
old_password
)
if
user
is
not
None
:
# Set the new password
user
.
set_password
(
new_password
)
user
.
save
()
update_session_auth_hash
(
request
,
user
)
messages
.
success
(
request
,
'Password changed successfully.'
)
return
redirect
(
'updatepassword_success'
)
# Redirect to the user's profile or another page
else
:
user_form
=
LibrarianUpdateForm
(
instance
=
librarian
.
user
)
messages
.
error
(
request
,
'Incorrect old password. Please try again.'
)
context
=
{
'user_form'
:
user_form
,
'librarian_form'
:
librarian_form
,
'librarian'
:
librarian
}
return
render
(
request
,
'update_password.html'
)
return
render
(
request
,
'librarian_update.html'
,
context
)
def
updatepassword_success
(
request
):
return
render
(
request
,
'updatepassword_success.html'
)
@
login_required
def
librarian_delete
(
request
,
pk
):
librarian
=
Librarian
.
objects
.
get
(
pk
=
pk
)
librarian
.
user
.
delete
()
librarian
.
delete
()
return
redirect
(
'librarian_list'
)
def
update_usermember
(
request
):
if
request
.
method
==
'POST'
:
form
=
MemberProfileUpdateForm
(
request
.
POST
,
instance
=
request
.
user
)
if
form
.
is_valid
():
form
.
save
()
messages
.
success
(
request
,
'Your Profile has been Update!'
)
return
redirect
(
'updateuser_success'
)
else
:
form
=
MemberProfileUpdateForm
(
instance
=
request
.
user
)
return
render
(
request
,
'update_usermember.html'
,
{
'form'
:
form
})
@
login_required
def
librarian_login_history
(
request
):
login_history
=
LoginHistory
.
objects
.
all
()
return
render
(
request
,
'librarian_login_history.html'
,
{
'login_history'
:
login_history
})
def
update_userlibrarian
(
request
):
if
request
.
method
==
'POST'
:
form
=
LibrarianProfileUpdateForm
(
request
.
POST
,
instance
=
request
.
user
)
if
form
.
is_valid
():
form
.
save
()
messages
.
success
(
request
,
'Your Profile has been Update!'
)
return
redirect
(
'updateuser_success'
)
else
:
form
=
LibrarianProfileUpdateForm
(
instance
=
request
.
user
)
return
render
(
request
,
'update_userlibrarian.html'
,
{
'form'
:
form
})
class
BookList
(
ListView
):
model
=
Book
template_name
=
"book_list.html"
context_object_name
=
'books'
class
BookCreateView
(
CreateView
):
model
=
Book
form_class
=
BookForm
template_name
=
'book_new.html'
success_url
=
reverse_lazy
(
'book_list'
)
# Adjust the success URL as needed
def
updateuser_success
(
request
):
return
render
(
request
,
'updateuser_success.html'
)
def
form_valid
(
self
,
form
):
form
.
instance
.
owner
=
self
.
request
.
user
return
super
()
.
form_valid
(
form
)
def
unauthorized
(
request
):
return
render
(
request
,
'unauthorized.html'
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookLoanList
(
ListView
):
model
=
BookLoan
template_name
=
'book_loan_list.html'
context_object_name
=
'bookloan'
@
method_decorator
(
librarian_required
,
name
=
'dispatch'
)
class
BookLoanCreateView
(
View
):
template_name
=
'book_loan_new.html'
# get book list
def
get
(
self
,
request
):
book
=
Book
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'book'
:
book
})
class
CategoryListView
(
ListView
):
model
=
Category
template_name
=
'category_list.html'
context_object_name
=
'categories'
\ No newline at end of file
# get member list
def
get
(
self
,
request
):
member
=
Member
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'member'
:
member
})
#form new book
def
post
(
self
,
request
):
form
=
BookLoanForm
(
request
.
POST
,
request
.
FILES
)
form
.
save
()
return
redirect
(
'bookloan-list'
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookLoanUpdateView
(
LibrarianRequiredMixin
,
UpdateView
):
template_name
=
'book_loan_update.html'
#get
def
get
(
self
,
request
,
pk
):
bookloan
=
get_object_or_404
(
BookLoan
,
pk
=
pk
)
book
=
Book
.
objects
.
all
()
member
=
Member
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'bookloan'
:
bookloan
,
'book'
:
book
,
'member'
:
member
})
# form update book
def
post
(
self
,
request
,
pk
):
book
=
get_object_or_404
(
Book
,
pk
=
pk
)
form
=
BookForm
(
request
.
POST
,
request
.
FILES
,
instance
=
book
)
form
.
save
()
return
redirect
(
'bookloan-update'
)
\ 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