38827-vm/core/views.py
Flatlogic Bot d702332e91 v1
2026-02-28 04:54:16 +00:00

111 lines
4.1 KiB
Python

import os
import random
from django import get_version as django_version
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django import forms
from .models import Profile, Photo
from django.utils import timezone
from django.contrib.auth.models import User
class WarwickRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True, help_text="Enter your @warwick.ac.uk email address")
def clean_email(self):
email = self.cleaned_data.get('email')
if not email.endswith("@warwick.ac.uk"):
raise forms.ValidationError("You must use a @warwick.ac.uk email address to register.")
if User.objects.filter(email=email).exists():
raise forms.ValidationError("This email is already in use.")
return email
def save(self, commit=True):
user = super().save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['course', 'year', 'location', 'looking_for', 'bio']
widgets = {
'course': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'e.g. Computer Science'}),
'year': forms.Select(attrs={'class': 'form-select'}),
'location': forms.Select(attrs={'class': 'form-select'}),
'looking_for': forms.Select(attrs={'class': 'form-select'}),
'bio': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Tell others a bit about yourself...'}),
}
def home(request):
if request.user.is_authenticated:
return redirect('dashboard')
return render(request, "core/index.html")
def register(request):
if request.method == 'POST':
form = WarwickRegistrationForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
messages.success(request, "Welcome to Warwick Connect! Please complete your profile.")
return redirect('profile_edit')
else:
form = WarwickRegistrationForm()
return render(request, 'core/register.html', {'form': form})
@login_required
def profile_edit(request):
profile = request.user.profile
if request.method == 'POST':
form = ProfileEditForm(request.POST, instance=profile)
if form.is_valid():
form.save()
messages.success(request, "Profile updated successfully!")
return redirect('dashboard')
else:
form = ProfileEditForm(instance=profile)
return render(request, 'core/profile_edit.html', {'form': form, 'profile': profile})
@login_required
def dashboard(request):
all_profiles = Profile.objects.exclude(user=request.user)
if not request.user.profile.is_subscribed:
profiles_list = list(all_profiles)
if len(profiles_list) > 12:
visible_profiles = random.sample(profiles_list, 12)
locked_profiles = [p for p in profiles_list if p not in visible_profiles]
else:
visible_profiles = profiles_list
locked_profiles = []
else:
visible_profiles = all_profiles
locked_profiles = []
context = {
'visible_profiles': visible_profiles,
'locked_profiles': locked_profiles,
'is_subscribed': request.user.profile.is_subscribed,
}
return render(request, 'core/dashboard.html', context)
def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user)
return redirect('dashboard')
else:
form = AuthenticationForm()
return render(request, 'core/login.html', {'form': form})
def logout_view(request):
logout(request)
return redirect('home')