cheesy/moku/views/user.py

78 lines
2.7 KiB
Python
Raw Normal View History

2024-03-25 11:59:06 +00:00
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.db import IntegrityError
2024-03-25 10:36:10 +00:00
from django.shortcuts import redirect
2024-03-25 11:59:06 +00:00
from django.utils.translation import gettext as _
2024-03-25 10:36:10 +00:00
from django.views.generic import FormView, TemplateView
2024-03-25 14:11:21 +00:00
from moku.images import process_avatar_image
from moku.forms.user import ProfileForm, UserForm, UserSettingsForm
2024-03-25 10:36:10 +00:00
from moku.models.user import User
class EditProfileView(LoginRequiredMixin, FormView):
2024-03-25 10:36:10 +00:00
template_name = "moku/profile/edit.jinja"
form_class = ProfileForm
def form_valid(self, form):
2024-03-25 14:11:21 +00:00
if "avatar" in form.changed_data and form.instance.avatar is not None:
form.instance.avatar = process_avatar_image(form.instance.avatar)
2024-03-25 10:36:10 +00:00
form.save()
2024-03-25 11:59:06 +00:00
messages.success(self.request, _("profile updated successfully!"))
2024-03-25 10:36:10 +00:00
return redirect("profile", username=form.instance.username)
def get_form(self):
return self.form_class(instance=self.request.user, **self.get_form_kwargs())
class EditSettingsView(LoginRequiredMixin, FormView):
template_name = "moku/settings.jinja"
form_class = UserSettingsForm
def form_valid(self, form):
form.instance.user = self.request.user
try:
form.save()
except IntegrityError:
messages.error(self.request, _("uh oh. i think something went a little bit oopsie."))
return self.form_invalid(form)
messages.success(self.request, _("settings updated!"))
return redirect("settings")
def get_form(self):
if hasattr(self.request.user, "settings"):
return self.form_class(instance=self.request.user.settings, **self.get_form_kwargs())
return super().get_form()
2024-03-25 10:36:10 +00:00
class ProfileView(TemplateView):
template_name = "moku/profile/show.jinja"
def get_context_data(self, **kwargs):
user = User.objects.get(username=self.kwargs.get("username"))
return {
**super().get_context_data(**kwargs),
2024-03-25 12:05:42 +00:00
"profile": user,
2024-03-25 10:36:10 +00:00
"posts": user.posts.order_by("-created_at").all(),
}
class SignupView(FormView):
template_name = "moku/signup.jinja"
form_class = UserForm
2024-03-25 11:31:18 +00:00
2024-03-25 11:59:06 +00:00
def form_valid(self, form):
form.instance.username = form.instance.username.lower()
try:
form.save()
except IntegrityError:
messages.error(self.request, _("sorry! someone else got to that username first."))
return self.form_invalid(form)
2024-03-25 11:59:06 +00:00
messages.success(self.request, _("that's it! just log in, and you're ready to go."))
return redirect("login")
def get(self, request, *args, **kwargs):
if self.request.user.is_authenticated:
return redirect("feed")
return super().get(request, *args, **kwargs)