Commit 0817782e authored by Gabriel Detraz's avatar Gabriel Detraz

Compte->Intranet2 (beta2, pas encore en prod)

parent 42c42a70
# -*- coding: utf-8 -*-
from django import forms
from django.forms import widgets
class NameForm(forms.Form):
nom = forms.CharField(label='Nom', max_length=10)
prenom = forms.CharField(label='Prénom', max_length=10)
tel = forms.CharField(label='Téléphone', max_length=10)
etudes = forms.IntegerField(label="Année d'étude", max_value=9)
newalias = forms.EmailField(label='Nouveau alias Mail', max_length=20, required=False)
passwdexists = forms.CharField(label='Ancien mot de passe', max_length=10, widget= widgets.PasswordInput, required=False)
newpasswd1 = forms.CharField(label='Nouveau mot de passe', max_length=10, widget= widgets.PasswordInput, required=False)
newpasswd2 = forms.CharField(label='Nouveau mot de passe', max_length=10, widget= widgets.PasswordInput, required=False)
greylist = forms.CharField(label='GreyList', max_length=10, widget= widgets.CheckboxInput, required=False)
from django.db import models
# Create your models here.
class Test(models.Model):
pass
"""
This file demonstrates two different styles of tests (one doctest and one
unittest). These will both pass when you run "manage.py test".
Replace these with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.failUnlessEqual(1 + 1, 2)
__test__ = {"doctest": """
Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2
True
"""}
from django.conf.urls import patterns as patterns
from django.conf.urls import url
import views
urlpatterns = patterns('',
url('^$', 'apps.compte.views.afficher', name='afficher')
)
# -*- coding: utf-8 -*-
# Récriture de l'app compte
# Enrichissement de celle-ci.
# Gabriel Détraz detraz@crans.org
import django.shortcuts
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect
from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext
from django.utils.importlib import import_module
conn_pool = import_module('conn_pool', 'intranet')
from passlib.apps import ldap_context
from gestion.chgpass import check_password
import lc_ldap
from forms import NameForm
from django.forms.util import ErrorList
# Vue d'affichage seulement des infos pour l'adh
@csrf_protect
@login_required
def afficher(request):
luser = conn_pool.get_user(request.user)
# On transmet au template des infos plus complètes que true or false...
if luser.carte_ok():
carte = "Fournie"
else:
carte = "Manquante"
if luser.paiement_ok():
paiement = "Valide"
else:
paiement = "Pas à jour"
if luser.access_ok():
connexion = "OK"
else:
connexion = "Pas de connexion"
# On transmet au template si les checkbox sont cochées ou pas à la base.
try:
greylist = luser['contourneGreylist'][0]
if greylist == "OK":
gl = True
else:
gl = False
except IndexError:
gl = False
if request.method == "POST":
form = NameForm(request.POST)
if form.is_valid():
print form.changed_data
# On ouvre une connexion
luser = conn_pool.get_user(request.user, mode='w')
# Modif de nom, prenom, tel (charfield dans forms)
luser['nom']=unicode(form.cleaned_data['nom'])
luser['prenom']=unicode(form.cleaned_data['prenom'])
# On vérifie qu'il n'y a que des chiffres
if form.cleaned_data['tel'].isdigit():
luser['tel']=unicode(form.cleaned_data['tel'])
else:
errors = form._errors.setdefault("tel", ErrorList())
errors.append(u"Le numéro ne doit contenir que des chiffres")
# Dans forms, etudes est un chiffre <9
luser['etudes'][1]=unicode(form.cleaned_data['etudes'])
# Trou dans le binding : on vérifie bien que le suffixe est @crans.org.
# Dans forms c'est defini comme mailadress
# On récupère la value error : l'alias est deja pris
if "newalias" in form.changed_data:
if "@crans.org" in form.cleaned_data['newalias']:
try:
luser['mailAlias'].append(form.cleaned_data['newalias'])
except ValueError:
errors = form._errors.setdefault("newalias", ErrorList())
errors.append(u"L'alias est déjà utilisé")
pass
else:
errors = form._errors.setdefault("newalias", ErrorList())
errors.append(u"L'alias doit avoir @crans.org pour suffixe")
# Changement de mot de passe : il faut satisfaire à : le mot de passe existant est le bon, les 2 champs nouveaux mot de passe sont égaux,
# , et le nouveau mot de passe respete la convention Cr@ns. Si non, on renvoie une erreur à chaque fois.
if "passwdexists" in form.changed_data:
if ldap_context.verify(unicode(form.cleaned_data['passwdexists']),unicode(luser['userPassword'][0])):
new_field2 = form.cleaned_data['newpasswd1'].encode('utf-8')
new_field3 = form.cleaned_data['newpasswd2'].encode('utf-8')
if new_field2 == new_field3:
if check_password(new_field2)==(True, ''):
hashedPassword = lc_ldap.crans_utils.hash_password(new_field2)
luser['userPassword'] = [hashedPassword.decode('ascii')]
else:
errors = form._errors.setdefault("newpasswd2", ErrorList())
errors.append(u"Le nouveau mot de passe doit contenir au moins 9 carractères, au moins une majuscule, un chiffre et une minuscule")
else:
errors = form._errors.setdefault("newpasswd2", ErrorList())
errors.append(u"Le nouveau mot de passe n'est pas le même sur les deux champs")
else:
errors = form._errors.setdefault("passwdexists", ErrorList())
errors.append(u"Le mot de passe existant n'est pas bon")
# Checkbox grey_list : rien de spécial ici
if form.cleaned_data['greylist']=="on":
luser["contourneGreylist"] = "OK"
elif form.cleaned_data['greylist']=="False":
luser["contourneGreylist"] = []
# On génère l'historique et on enregistre
luser.history_gen()
luser.save()
else:
form = NameForm(initial={'nom': luser['nom'][0], 'prenom': luser['prenom'][0],'tel': luser['tel'][0],'greylist': gl, 'etudes': luser['etudes'][1]})
return django.shortcuts.render_to_response("compte/affichage.html", locals(), context_instance=RequestContext(request))
# Create your views here.
import django.shortcuts
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from django.utils.importlib import import_module
conn_pool = import_module('conn_pool', 'intranet')
#from models import Test
import models
@login_required
def index(request):
luser = conn_pool.get_user(request.user)
carte =
return django.shortcuts.render_to_response("compte/test.html", {"luser" : luser }, context_instance=RequestContext(request))
# Create your views here.
import django.shortcuts
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext
from django.utils.importlib import import_module
conn_pool = import_module('conn_pool', 'intranet')
from models import Test
import models
@csrf_protect
@login_required
def index(request):
luser = conn_pool.get_user(request.user)
carte = luser.carte_ok
if carte:
carte = unicode("Valide")
else:
carte = unicode("Manquante")
paiement = luser.paiement_ok
if paiement:
paiement = unicode("Valide")
else:
paiement = unicode("Pas a jour")
connexion = luser.access_ok
if connexion:
connexion = unicode("OK")
else:
connexion = unicode("Pas de connexion")
return django.shortcuts.render_to_response("compte/test.html", {"luser" : luser, "carte": carte, "paiement": paiement, "connexion": connexion }, context_instance=RequestContext(request))
@csrf_protect
@login_required
def modify(request):
if request.method == "GET":
champ = request.GET['type']
return django.shortcuts.render_to_response("compte/modify.html", {'champ': champ }, context_instance=RequestContext(request))
else:
type = request.POST['type']
new_field = request.POST['champ']
luser = conn_pool.get_user(request.user)
# luser['nom']=unicode(new_field)
return django.shortcuts.redirec)
# return django.shortcuts.render_to_response("compte/test.html", context_instance=RequestContext(request))
{% extends "template.html" %}
{% block title %} Mon Compte {% endblock %}
{% block content %}
<table>
<form action="/compte/" method="post">
{% csrf_token %}
<tr><td>{{ form.nom.label_tag }}: {{ form.nom }}</tr></td>
<tr><td>{{ form.prenom.label_tag }}: {{ form.prenom }}</tr></td>
<tr><td>{{ form.tel.label_tag }}: {{ form.tel }} {{ form.tel.errors }}</tr></td>
{% if luser.chbre.0 != "EXT" %}<tr><td>Chambre : {{luser.chbre.0}}</td></tr>{% endif %}
{% if luser.postalAddress %}<tr><td>Adresse : </td></tr>{% for addresse in luser.postalAddress %}<tr><td>{{ addresse }}</td></tr>{% endfor %}{% endif %}
<tr><td>Solde : {{luser.solde.0|default:"0"}} €</td></tr>
<tr><td>Etudes, etablissement : {{luser.etudes.0}}</td></tr>
<tr><td>{{ form.etudes.label_tag }}: {{ form.etudes }} {{ form.etudes.errors }}</td></tr>
<tr><td>Domaine : {{luser.etudes.2}}</td></tr>
<tr><td>Carte d'etudiant : {{ carte }}</td></tr>
<tr><td>Etat des cotisations : {{ paiement }}</td></tr>
<tr><td>Connexion : {{ connexion }}</td></tr>
<tr><td>Droits sur les serveurs : {% for droit in luser.droits %}{{ droit }}{% if not forloop.last %}, {% endif %}{% empty %}Aucun{% endfor %}</td></tr>
<tr><td>Mail : {{luser.mail.0}}</td></tr>
<tr><td>Alias Mail : {% for alias in luser.mailAlias %}{{ alias }}{% if not forloop.last %}, {% endif %}{% empty %}Aucun{% endfor %}</td></tr>
<tr><td>{{ form.newalias.label_tag }}: {{ form.newalias }} {{ form.newalias.errors }}</tr></td>
<td>Afin d'éviter les abus, la destruction d'un alias nécessite une demande via la mailing-list respbats@crans.org</td>
<tr><td>{{ form.greylist.label_tag }}: {{ form.greylist }}</tr></td>
<tr><td>{{ form.passwdexists.label_tag }}: {{ form.passwdexists }} {{ form.passwdexists.errors }}</tr></td>
<tr><td>{{ form.newpasswd1.label_tag }}: {{ form.newpasswd1 }}</tr></td>
<tr><td>{{ form.newpasswd2.label_tag }}: {{ form.newpasswd2 }} {{ form.newpasswd2.errors }}</tr></td>
<tr><td><input type="submit" value="Enregistrer"></tr></td>
</form>
</table>
{% endblock %}
  • Pour le template, non. A priori, le but d'utiliser un formulaire est de ne PAS générer un formulaire en HTML. Il y a des méthodes internes aux objets forms pour les manipuler et générer automatiquement le formulaire HTML qui va bien.

Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment