mirror of
https://github.com/kristoferssolo/FOSSDB.git
synced 2025-10-21 17:50:35 +00:00
119 lines
3.6 KiB
Python
119 lines
3.6 KiB
Python
from django.contrib import messages
|
|
from django.contrib.auth import authenticate, login, logout, update_session_auth_hash
|
|
from django.contrib.auth.forms import PasswordChangeForm
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.shortcuts import redirect, render
|
|
from django.urls import reverse_lazy
|
|
from django.views.generic import ListView, TemplateView, View
|
|
|
|
from fossdb.models import Project
|
|
|
|
from .forms import LoginForm, SignUpForm, UserChangeForm
|
|
|
|
|
|
class ProfileUpdateView(LoginRequiredMixin, TemplateView):
|
|
template_name = "setting.html"
|
|
login_url = reverse_lazy("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):
|
|
model = Project
|
|
template_name = "profile.html"
|
|
context_object_name = "projects"
|
|
login_url = reverse_lazy("login")
|
|
redirect_field_name = "redirect_to"
|
|
|
|
def get_queryset(self):
|
|
return Project.objects.filter(owner=self.request.user)
|
|
|
|
def get_context_data(self, *args, **kwargs):
|
|
data = super().get_context_data(**kwargs)
|
|
data["title"] = self.request.user.username + ("" if not self.request.user.full_name else f" ({self.request.user.full_name})")
|
|
return data
|
|
|
|
|
|
def signup_view(request):
|
|
form = SignUpForm(request.POST or None)
|
|
if request.method == "POST":
|
|
if form.is_valid():
|
|
user = form.save()
|
|
raw_password = form.cleaned_data.get("password1")
|
|
user = authenticate(username=user.username, password=raw_password)
|
|
login(request, user)
|
|
return redirect("homepage")
|
|
|
|
context = {
|
|
"title": "FOSSDB | SignUp",
|
|
"form": form,
|
|
}
|
|
return render(request, "signup.html", context)
|
|
|
|
|
|
def login_view(request):
|
|
form = LoginForm(data=request.POST or None)
|
|
if request.method == "POST":
|
|
if form.is_valid():
|
|
user = form.get_user()
|
|
login(request, user)
|
|
return redirect("homepage")
|
|
|
|
context = {
|
|
"title": "FOSSDB | Login",
|
|
"form": form,
|
|
}
|
|
return render(request, "login.html", context)
|
|
|
|
|
|
class LogoutView(View):
|
|
def get(self, request):
|
|
logout(request)
|
|
return redirect("login")
|