From 1590ae8e84655479fd4b8e8fc82d45e8e89f1297 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Thu, 29 Jun 2023 21:46:14 +0000 Subject: [PATCH] Created settings page --- src/apps/account/templates/setting.html | 24 ++++++++ src/apps/account/views.py | 74 ++++++++++++++++++++----- 2 files changed, 83 insertions(+), 15 deletions(-) create mode 100644 src/apps/account/templates/setting.html diff --git a/src/apps/account/templates/setting.html b/src/apps/account/templates/setting.html new file mode 100644 index 0000000..32aae6c --- /dev/null +++ b/src/apps/account/templates/setting.html @@ -0,0 +1,24 @@ +{% extends "base.html" %} +{% load static %} +{% block title %}{{ title }}{% endblock %} +{% block meta %}{% endblock %} +{% block content %} +
+
+ + + +
+
+

Edit profile

+ {% csrf_token %} + {{ user_form.username }} + {{ user_form.email }} + {{ user_form.first_name }} + {{ user_form.last_name }} + +
+
+{% endblock %} diff --git a/src/apps/account/views.py b/src/apps/account/views.py index fc6ba2e..9a5dd25 100644 --- a/src/apps/account/views.py +++ b/src/apps/account/views.py @@ -1,12 +1,66 @@ -from django.contrib.auth import authenticate, login +from django.contrib import messages +from django.contrib.auth import authenticate, login, update_session_auth_hash from django.contrib.auth.forms import PasswordChangeForm from django.contrib.auth.mixins import LoginRequiredMixin -from django.shortcuts import get_object_or_404, redirect, render -from django.views.generic import ListView +from django.shortcuts import redirect, render +from django.views.generic import ListView, TemplateView + from fossdb.models import Project -from .forms import LoginForm, SignUpForm -from .models import User +from .forms import LoginForm, SignUpForm, UserChangeForm + + +class ProfileUpdateView(LoginRequiredMixin, TemplateView): + template_name = "setting.html" + login_url = "/login/" + redirect_field_name = "redirect_to" + + def get(self, request): + user_form = UserChangeForm(instance=request.user) + context = { + "title": "Your profile", + "user_form": user_form, + } + return self.render_to_response(context) + + def post(self, request): + user_form = UserChangeForm(request.POST, instance=request.user) + + if user_form.is_valid(): + user_form.save() + messages.add_message(request, messages.SUCCESS, "Your profile was successfully updated!") + + context = { + "title": "Your profile", + "user_form": user_form, + } + return self.render_to_response(context) + + +class PasswordChangeView(LoginRequiredMixin, TemplateView): + template_name = "password.html" + + def get(self, request): + form = PasswordChangeForm(user=request.user) + context = { + "title": "Change password", + "form": form, + } + return self.render_to_response(context) + + def post(self, request): + form = PasswordChangeForm(data=request.POST, user=request.user) + if form.is_valid(): + form.save() + + update_session_auth_hash(request, form.user) + messages.add_message(request, messages.SUCCESS, "Your password was successfully updated!") + + context = { + "title": "Change password", + "form": form, + } + return self.render_to_response(context) class ProfileProjectListView(LoginRequiredMixin, ListView): @@ -25,16 +79,6 @@ class ProfileProjectListView(LoginRequiredMixin, ListView): return data -def profile(request, username): - user = get_object_or_404(User, username=username) - - context = { - "title": user.username + ("" if not user.full_name else f" ({user.full_name})"), - "user": user, - } - return render(request, "profile.html", context) - - def signup_view(request): form = SignUpForm(request.POST or None) if request.method == "POST":