Commit 7004514f authored by impfundev's avatar impfundev

fix: handle password empty and hashed new password on member and librarian

parent ac2c1922
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
</button> </button>
<a <a
class="w-100 btn btn-outline-primary border-white text-white text-start" class="w-100 btn btn-outline-primary border-white text-white text-start"
href="/dashboard/librarians/{{ user.id }}/update/" href="/dashboard/librarians/{{ user.id }}/"
><i class="bi bi-person-fill-gear"></i> profile</a ><i class="bi bi-person-fill-gear"></i> profile</a
> >
<a <a
......
...@@ -26,3 +26,7 @@ class LibrarianForm(forms.ModelForm): ...@@ -26,3 +26,7 @@ class LibrarianForm(forms.ModelForm):
} }
), ),
} }
def __init__(self, *args, **kwargs):
super(LibrarianForm, self).__init__(*args, **kwargs)
self.fields["password"].required = False
from django.db.models import Q from django.db.models import Q
from django.views import generic from django.views import generic
from librarians.models import Librarians from librarians.models import Librarians
from librarians.forms import LibrarianForm from librarians.forms import LibrarianForm
from authentications.utils import Hasher
class LibrarianListView(generic.ListView): class LibrarianListView(generic.ListView):
...@@ -28,24 +30,59 @@ class LibrarianListView(generic.ListView): ...@@ -28,24 +30,59 @@ class LibrarianListView(generic.ListView):
return queryset.order_by("-updated_at") return queryset.order_by("-updated_at")
class LibrarianCreateView(generic.edit.CreateView): class LibrarianCreateView(generic.FormView):
model = Librarians model = Librarians
form_class = LibrarianForm form_class = LibrarianForm
success_url = "/dashboard/librarians/" success_url = "/dashboard/librarians/"
template_name = "form/create_form.html" template_name = "form/create_form.html"
success_message = "Librarian created successfully!"
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
formData = form.cleaned_data.copy()
formData["password"] = Hasher.encode(formData["password"])
self.model.objects.create(**formData)
return super().post(request, *args, **kwargs)
class LibrarianUpdateView(generic.edit.UpdateView): class LibrarianUpdateView(generic.FormView):
model = Librarians model = Librarians
form_class = LibrarianForm form_class = LibrarianForm
success_url = "/dashboard/librarians" success_url = "/dashboard/librarians"
template_name = "form/update_form.html" template_name = "form/update_form.html"
success_message = "Librarian updated successfully!"
def get(self, request, *args, **kwargs):
librarian = self.model.objects.get(pk=kwargs["pk"])
self.initial = {
"name": librarian.name,
"email": librarian.email,
"password": librarian.password,
}
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
librarian = self.model.objects.get(pk=kwargs["pk"])
form = self.get_form()
if form.is_valid():
formData = form.cleaned_data.copy()
new_password = form.cleaned_data.get("password")
if new_password:
formData["password"] = Hasher.encode(formData["password"])
else:
formData["password"] = librarian.password
self.model.objects.filter(pk=kwargs["pk"]).update(**formData)
return super().post(request, *args, **kwargs)
return self.form_invalid(form)
class LibrarianDeleteView(generic.edit.DeleteView): class LibrarianDeleteView(generic.edit.DeleteView):
model = Librarians model = Librarians
success_url = "/dashboard/librarians" success_url = "/dashboard/librarians"
template_name = "form/delete_form.html" template_name = "form/delete_form.html"
success_message = "Librarian deleted successfully!"
...@@ -27,3 +27,7 @@ class MemberForm(forms.ModelForm): ...@@ -27,3 +27,7 @@ class MemberForm(forms.ModelForm):
} }
), ),
} }
def __init__(self, *args, **kwargs):
super(MemberForm, self).__init__(*args, **kwargs)
self.fields["password"].required = False
from django.db.models import Q from django.db.models import Q
from django.views import generic from django.views import generic
from members.models import Members from members.models import Members
from members.forms import MemberForm from members.forms import MemberForm
from authentications.utils import Hasher
class MemberListView(generic.ListView): class MemberListView(generic.ListView):
...@@ -28,19 +30,57 @@ class MemberListView(generic.ListView): ...@@ -28,19 +30,57 @@ class MemberListView(generic.ListView):
return queryset.order_by("-updated_at") return queryset.order_by("-updated_at")
class MemberCreateView(generic.edit.CreateView): class MemberCreateView(generic.FormView):
model = Members model = Members
form_class = MemberForm form_class = MemberForm
success_url = "/dashboard/members/" success_url = "/dashboard/members/"
template_name = "form/create_form.html" template_name = "form/create_form.html"
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
formData = form.cleaned_data.copy()
formData["password"] = Hasher.encode(formData["password"])
self.model.objects.create(**formData)
return super().post(request, *args, **kwargs)
class MemberUpdateView(generic.edit.UpdateView): class MemberUpdateView(generic.FormView):
model = Members model = Members
form_class = MemberForm form_class = MemberForm
success_url = "/dashboard/members" success_url = "/dashboard/members"
template_name = "form/update_form.html" template_name = "form/update_form.html"
def get(self, request, *args, **kwargs):
member = self.model.objects.get(pk=kwargs["pk"])
self.initial = {
"name": member.name,
"email": member.email,
"password": member.password,
}
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
member = self.model.objects.get(pk=kwargs["pk"])
form = self.get_form()
if form.is_valid():
formData = form.cleaned_data.copy()
new_password = form.cleaned_data.get("password")
if new_password:
formData["password"] = Hasher.encode(formData["password"])
else:
formData["password"] = member.password
self.model.objects.filter(pk=kwargs["pk"]).update(**formData)
return super().post(request, *args, **kwargs)
return self.form_invalid(form)
class MemberDeleteView(generic.edit.DeleteView): class MemberDeleteView(generic.edit.DeleteView):
model = Members model = Members
......
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