NewViewsNews/users/views.py

175 lines
6.0 KiB
Python

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import update_session_auth_hash, login, authenticate
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AdminPasswordChangeForm, PasswordChangeForm, UserCreationForm
from .forms import UserRegisterForm, UserUpdateForm, ProfileUpdateForm, ValuesUpdateForm
from social_django.models import UserSocialAuth
from .models import Profile
def register(request):
createProfileIfNotExist(request)
if checkValues(request) is False:
return redirect('values')
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been created! You are now able to log in')
return redirect('login')
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
@login_required
def profile(request):
createProfileIfNotExist(request)
if checkValues(request) is False:
return redirect('values')
user = request.user
if Profile.objects.filter(user=user).count() < 1:
Profile.objects.create(user=user).save()
if user.has_usable_password() is False:
return redirect ('password')
try:
github_login = user.social_auth.get(provider='github')
except UserSocialAuth.DoesNotExist:
github_login = None
try:
google_login = user.social_auth.get(provider='google-oauth2')
except UserSocialAuth.DoesNotExist:
google_login = None
try:
facebook_login = user.social_auth.get(provider='facebook')
except UserSocialAuth.DoesNotExist:
facebook_login = None
can_disconnect = (user.social_auth.count() > 1 or user.has_usable_password())
if request.user.has_usable_password():
PasswordForm = PasswordChangeForm
else:
PasswordForm = AdminPasswordChangeForm
if request.method == "POST":
userForm = UserUpdateForm(request.POST, instance=request.user)
profileForm = ProfileUpdateForm(request.POST,
request.FILES,
instance=request.user.profile)
passwordForm = PasswordForm(request.user, request.POST)
valuesForm = ValuesUpdateForm(request.POST, instance=request.user.profile)
if userForm.is_valid() and profileForm.is_valid():
userForm.save()
profileForm.save()
messages.success(request, "Your account has been updated!")
return redirect('profile')
elif passwordForm.is_valid():
passwordForm.save()
update_session_auth_hash(request, passwordForm.user)
messages.success(request, 'Your password was successfully updated!')
return redirect('profile')
elif valuesForm.is_valid():
valuesForm.save()
messages.success(request, "Thanks for your input! We'll now be serving articles of exactly differing opinons, enjoy!")
return redirect('profile')
else:
messages.error(request, 'Please correct the errors below.')
else:
userForm = UserUpdateForm(instance=request.user)
profileForm = ProfileUpdateForm(instance=request.user.profile)
passwordForm = PasswordForm(request.user)
valuesForm = ValuesUpdateForm(instance=request.user)
valueX = user.profile.economicScore * 2.5 + 250
valueY = user.profile.socialScore * -2.5 + 250
context = {
'userForm': userForm,
'profileForm': profileForm,
'passwordForm': passwordForm,
'valuesForm': valuesForm,
'valueX': valueX,
'valueY': valueY,
'github_login': github_login,
'google_login': google_login,
'facebook_login': facebook_login,
'can_disconnect': can_disconnect,
}
return render(request, 'users/profile.html', context)
@login_required
def values (request):
user = request.user
if request.method == "POST":
userForm = ValuesUpdateForm(request.POST, instance=request.user.profile)
if userForm.is_valid():
userForm.save()
profile = request.user.profile
profile.gaveValues = True
profile.save()
messages.success(request, "Thanks for your input! We'll now be serving articles of exactly differing opinons, enjoy!")
return redirect('home')
else:
messages.error(request, 'Please correct the errors below.')
else:
userForm = ValuesUpdateForm(instance=request.user.profile)
context = {
'form': userForm
}
return render(request, 'users/values.html', context)
@login_required
def password(request):
createProfileIfNotExist(request)
if checkValues(request) is False:
return redirect('values')
if request.user.has_usable_password():
PasswordForm = PasswordChangeForm
else:
PasswordForm = AdminPasswordChangeForm
if request.method == 'POST':
form = PasswordForm(request.user, request.POST)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
messages.success(request, 'Your password was successfully updated!')
return redirect('profile')
else:
messages.error(request, 'Please correct the error below.')
else:
form = PasswordForm(request.user)
return render(request, 'users/password.html', {'form': form})
def createProfileIfNotExist (request):
if request.user.is_authenticated and Profile.objects.filter(user=request.user).count() < 1:
Profile.objects.create(user=request.user).save()
def checkValues (request):
if request.user.is_authenticated and Profile.objects.filter(user=request.user).count() is 1:
profile = Profile.objects.filter(user=request.user).first()
return profile.gaveValues
return True