Put view into a module

This commit is contained in:
Skia
2015-11-24 16:09:46 +01:00
parent ebcdcf4245
commit 18115a0dc4
7 changed files with 201 additions and 193 deletions

3
core/views/__init__.py Normal file
View File

@ -0,0 +1,3 @@
from .user import *
from .page import *
from .site import *

97
core/views/forms.py Normal file
View File

@ -0,0 +1,97 @@
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UserChangeForm
from django import forms
from django.contrib.auth import logout, login, authenticate
import logging
from core.models import User, Page
class RegisteringForm(UserCreationForm):
error_css_class = 'error'
required_css_class = 'required'
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'date_of_birth')
def save(self, commit=True):
user = super(RegisteringForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
user.generate_username()
if commit:
user.save()
return user
class LoginForm(AuthenticationForm):
def login(self):
u = authenticate(username=self.request.POST['username'],
password=self.request.POST['password'])
if u is not None:
if u.is_active:
login(self.request, u)
logging.debug("Logging in "+str(u))
else:
raise forms.ValidationError(
self.error_messages['invalid_login'],
code='inactive',
params={'username': self.username_field.verbose_name},
)
else:
logging.debug("Login failed")
raise forms.ValidationError(
self.error_messages['invalid_login'],
code='invalid_login',
params={'username': self.username_field.verbose_name},
)
class UserEditForm(UserChangeForm):
error_css_class = 'error'
required_css_class = 'required'
class Meta:
model = User
fields = ('first_name', 'last_name', 'nick_name', 'email', 'date_of_birth', 'groups', 'user_permissions',)
def __init__(self, *args, **kwargs):
super(UserEditForm, self).__init__(*args, **kwargs)
def clean_password(self):
"""We never handle password in this form"""
return
class PagePropForm(forms.ModelForm):
error_css_class = 'error'
required_css_class = 'required'
parent = forms.ModelChoiceField(queryset=Page.objects.all())
def __init__(self, *args, **kwargs):
super(PagePropForm, self).__init__(*args, **kwargs)
self.fields['parent'].required = False
class Meta:
model = Page
fields = ['parent', 'name', 'owner_group', 'edit_group', 'view_group']
def save(self, commit=True):
page = super(PagePropForm, self).save(commit=False)
if commit:
page.save()
return page
class PageEditForm(forms.ModelForm):
error_css_class = 'error'
required_css_class = 'required'
def __init__(self, *args, **kwargs):
super(PageEditForm, self).__init__(*args, **kwargs)
class Meta:
model = Page
fields = ['title', 'content', ]
def save(self, commit=True):
page = super(PageEditForm, self).save(commit=False)
if commit:
page.save()
return page

88
core/views/page.py Normal file
View File

@ -0,0 +1,88 @@
# This file contains all the views that concern the page model
from django.shortcuts import render, redirect, get_object_or_404
from core.models import Page
from core.views.forms import PageEditForm, PagePropForm
def page(request, page_name=None):
"""
This view displays a page or the link to create it if 404
"""
context = {'title': 'View a Page'}
if page_name == None:
context['page_list'] = Page.objects.all
return render(request, "core/page.html", context)
context['page'] = Page.get_page_by_full_name(page_name)
if context['page'] is not None:
context['view_page'] = True
context['title'] = context['page'].title
context['tests'] = "PAGE_FOUND : "+context['page'].title
else:
context['title'] = "This page does not exist"
context['new_page'] = page_name
context['tests'] = "PAGE_NOT_FOUND"
return render(request, "core/page.html", context)
def page_edit(request, page_name=None):
"""
page_edit view, able to create a page, save modifications, and display the page ModelForm
"""
context = {'title': 'Edit a page',
'page_name': page_name}
p = Page.get_page_by_full_name(page_name)
# New page
if p == None:
parent_name = '/'.join(page_name.split('/')[:-1])
name = page_name.split('/')[-1]
if parent_name == "":
p = Page(name=name)
else:
parent = Page.get_page_by_full_name(parent_name)
p = Page(name=name, parent=parent)
# Saving page
if request.method == 'POST':
f = PageEditForm(request.POST, instance=p)
if f.is_valid():
f.save()
context['tests'] = "PAGE_SAVED"
else:
context['tests'] = "PAGE_NOT_SAVED"
# Default: display the edit form without change
else:
context['tests'] = "POST_NOT_RECEIVED"
f = PageEditForm(instance=p)
context['page'] = p
context['page_edit'] = f.as_p()
return render(request, 'core/page.html', context)
def page_prop(request, page_name=None):
"""
page_prop view, able to change a page's properties
"""
context = {'title': 'Page properties',
'page_name': page_name}
p = Page.get_page_by_full_name(page_name)
# New page
if p == None:
parent_name = '/'.join(page_name.split('/')[:-1])
name = page_name.split('/')[-1]
if parent_name == "":
p = Page(name=name)
else:
parent = Page.get_page_by_full_name(parent_name)
p = Page(name=name, parent=parent)
# Saving page
if request.method == 'POST':
f = PagePropForm(request.POST, instance=p)
if f.is_valid():
f.save()
context['tests'] = "PAGE_SAVED"
else:
context['tests'] = "PAGE_NOT_SAVED"
# Default: display the edit form without change
else:
context['tests'] = "POST_NOT_RECEIVED"
f = PagePropForm(instance=p)
context['page'] = p
context['page_prop'] = f.as_p()
return render(request, 'core/page.html', context)

19
core/views/site.py Normal file
View File

@ -0,0 +1,19 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse
from django.contrib.auth import logout as auth_logout
from django.db import models
from django.contrib.auth.forms import PasswordChangeForm
from core.models import User, Page
from core.views.forms import RegisteringForm, LoginForm, UserEditForm, PageEditForm, PagePropForm
import logging
logging.basicConfig(level=logging.DEBUG)
def index(request, context=None):
if context == None:
return render(request, "core/index.html", {'title': 'Bienvenue!'})
else:
return render(request, "core/index.html", context)

88
core/views/user.py Normal file
View File

@ -0,0 +1,88 @@
# This file contains all the views that concern the user model
from django.shortcuts import render, redirect, get_object_or_404
import logging
from core.views.forms import RegisteringForm, LoginForm
def register(request):
context = {'title': 'Register a user'}
if request.method == 'POST':
form = RegisteringForm(request.POST)
if form.is_valid():
logging.debug("Registering "+form.cleaned_data['first_name']+form.cleaned_data['last_name'])
u = form.save()
context['user_registered'] = u
context['tests'] = 'TEST_REGISTER_USER_FORM_OK'
form = RegisteringForm()
else:
context['error'] = 'Erreur'
context['tests'] = 'TEST_REGISTER_USER_FORM_FAIL'
else:
form = RegisteringForm()
context['form'] = form.as_p()
return render(request, "core/register.html", context)
def login(request):
"""
The login view
Needs to be improve with correct handling of form exceptions
"""
context = {'title': 'Login'}
if request.method == 'POST':
try:
form = LoginForm(request)
form.login()
context['tests'] = 'LOGIN_OK'
return render(request, 'core/index.html', context)
except Exception as e:
logging.debug(e)
context['error'] = "Login failed"
context['tests'] = 'LOGIN_FAIL'
else:
form = LoginForm()
context['form'] = form.as_p()
return render(request, "core/login.html", context)
def logout(request):
"""
The logout view
"""
auth_logout(request)
return redirect('core:index')
def user(request, user_id=None):
"""
Display a user's profile
"""
context = {'title': 'View a user'}
if user_id == None:
context['user_list'] = User.objects.all
return render(request, "core/user.html", context)
context['profile'] = get_object_or_404(User, pk=user_id)
return render(request, "core/user.html", context)
def user_edit(request, user_id=None):
"""
This view allows a user, or the allowed users to modify a profile
"""
user_id = int(user_id)
context = {'title': 'Edit a user'}
if user_id is not None:
user_id = int(user_id)
if request.user.is_authenticated() and (request.user.pk == user_id or request.user.is_superuser):
p = get_object_or_404(User, pk=user_id)
if request.method == 'POST':
f = UserEditForm(request.POST, instance=p)
# Saving user
if f.is_valid():
f.save()
context['tests'] = "USER_SAVED"
else:
context['tests'] = "USER_NOT_SAVED"
else:
f = UserEditForm(instance=p)
context['profile'] = p
context['user_form'] = f.as_p()
return render(request, "core/edit_user.html", context)
return user(request, user_id)