food-planner/food_planner/views.py

123 lines
3.9 KiB
Python
Raw Normal View History

2020-02-19 10:34:17 +01:00
# coding=utf-8
from gettext import gettext as _
from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.views import LoginView
from django.db import transaction
from django.http import HttpResponse
from django.shortcuts import redirect
from django.shortcuts import render
from django.urls import reverse
2020-02-19 10:55:46 +01:00
from food_planner.forms import ProfileForm
from food_planner.forms import UserForm
2020-02-19 10:34:17 +01:00
def index(request) -> HttpResponse:
context = {
'site': {
2020-02-19 10:55:46 +01:00
'title': 'Food planner'
2020-02-19 10:34:17 +01:00
}
}
if request.user.is_authenticated:
2020-02-19 10:55:46 +01:00
return render(request, template_name='food_planner/home.html', context=context)
2020-02-19 10:34:17 +01:00
else:
2020-02-19 10:55:46 +01:00
return render(request, template_name='food_planner/landing.html', context=context)
2020-02-19 10:34:17 +01:00
@transaction.atomic
def register(request) -> HttpResponse:
if request.user.is_authenticated:
return redirect('app:index')
user_form = UserCreationForm(data=request.POST or None)
profile_form = ProfileForm(data=request.POST or None, files=request.FILES or None)
context = {
'site': {
2020-02-19 10:55:46 +01:00
'title': 'Food planner'
2020-02-19 10:34:17 +01:00
},
'user_form': user_form,
'profile_form': profile_form
}
if request.method == "POST" and user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
profile = profile_form.save(commit=False)
profile.user = user
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
login(request, user=user)
messages.success(request, _('User was successfully registered'))
return redirect('edit_profile')
return render(request, template_name='registration/register.html', context=context)
def user_login(request) -> HttpResponse:
login_view = LoginView()
login_view.setup(request)
login_view.redirect_authenticated_user = True
login_view.extra_context = {
'active': 'login',
'title': _('Login'),
'site': {
2020-02-19 10:55:46 +01:00
'title': 'Food planner'
2020-02-19 10:34:17 +01:00
},
}
return login_view.dispatch(request)
@login_required()
@transaction.atomic
def edit_profile(request) -> HttpResponse:
user_form = UserForm(data=request.POST or None, instance=request.user)
profile_form = ProfileForm(data=request.POST or None, files=request.FILES or None,
instance=request.user.profile)
user_form.fields['email'].help_text = _('The email address is required for password recovery.')
context = {
'active': 'edit_profile',
'title': _('Edit User Profile'),
'site': {
2020-02-19 10:55:46 +01:00
'title': 'Food planner'
2020-02-19 10:34:17 +01:00
},
'user_form': user_form,
'profile_form': profile_form
}
if request.method == "POST" and user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile = profile_form.save(commit=False)
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
messages.success(request, _('Profile was successfully updated'))
return render(request, template_name='registration/edit_profile.html', context=context)
@login_required()
def password_change_done(request) -> HttpResponse:
messages.success(request, _('Your password was successfully changed.'))
return redirect(reverse('edit_profile'))
def legal(request) -> HttpResponse:
context = {
'site': {
2020-02-19 10:55:46 +01:00
'title': 'Food planner'
2020-02-19 10:34:17 +01:00
}
}
2020-02-19 10:55:46 +01:00
return render(request, template_name='food_planner/legal.html', context=context)
2020-02-19 10:34:17 +01:00
def privacy(request) -> HttpResponse:
context = {
'site': {
2020-02-19 10:55:46 +01:00
'title': 'Food planner'
2020-02-19 10:34:17 +01:00
}
}
2020-02-19 10:55:46 +01:00
return render(request, template_name='food_planner/privacy.html', context=context)