- Fecha y hora:
- 22/08/2016 16:42:35 (hace 8 años)
- Branches:
- master, carga
- Children:
- 78a4808
- Parents:
- d75c603
- Ubicación:
- usuario
- Ficheros:
-
- 2 añadidos
- 2 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
usuario/forms.py
rfbb0f12 rd8d20e7 54 54 fields = ['tipo_documento', 'clave', 'captcha'] 55 55 56 56 57 @python_2_unicode_compatible 57 58 class OlvidoClaveForm(TipoDocumentoForm, CorreoForm, CaptchaForm): -
usuario/views.py
rfbb0f12 rd8d20e7 1 from django.shortcuts import render 1 """ 2 Sistema Estadístico Integral de Venezuela - (SEIVEN) 2 3 3 # Create your views here. 4 Copyleft (@) 2015 CENDITEL nodo Mérida - https://mpv.cenditel.gob.ve/seiven 5 """ 6 ## @namespace usuario.views 7 # 8 # Contiene las clases, atributos, métodos y/o funciones a implementar para las vistas del módulo de usuario 9 # @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 10 # @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres 11 # (CENDITEL) nodo Mérida - Venezuela</a> 12 # @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 13 from __future__ import unicode_literals 14 15 import base64 16 import hashlib 17 from datetime import datetime 18 19 from django.conf import settings 20 from django.contrib import messages 21 from django.contrib.auth import logout, login, authenticate 22 from django.contrib.auth.models import User 23 from django.contrib.messages.views import SuccessMessageMixin 24 from django.core import urlresolvers 25 from django.core.urlresolvers import reverse_lazy, reverse 26 from django.http import HttpResponseRedirect 27 from django.shortcuts import render_to_response 28 from django.template import RequestContext 29 from django.views.generic import CreateView, UpdateView, ListView 30 from django.utils.translation import ugettext_lazy as _ 31 32 from base.constant import REGISTRO_MESSAGE, EMAIL_SUBJECT_REGISTRO 33 from base.functions import enviar_correo 34 from .forms import AutenticarForm, RegistroForm, OlvidoClaveForm, ModificarClaveForm, PerfilForm 35 36 import logging 37 38 from .models import UserProfile 39 40 logger = logging.getLogger("usuario") 41 42 def hash_user(user, is_new_user=False, is_reset=False): 43 """! 44 Función que permite encriptar los datos del usuario 45 46 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 47 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 48 @date 22-08-2016 49 @param user <b>{object}</b> Objeto que obtiene los datos del usuario 50 @param is_new_user <b>{boolean}</b> Indica si es un nuevo usuario 51 @param is_reset <b>{boolean}</b> Indica si se reinician los datos del usuario 52 @return Devuelve un enlace cifrado 53 """ 54 55 if is_new_user: 56 date_to_hash = user.date_joined.isoformat() 57 else: 58 date_to_hash = user.last_login.isoformat() 59 60 username = user.username 61 password = user.password 62 date_to_hash = date_to_hash + ("", "|reset")[is_reset] 63 cadena = username + "|" + password + "|" + date_to_hash 64 65 hash = hashlib.sha1(cadena.encode("utf-8")).hexdigest() 66 return base64.urlsafe_b64encode(bytes(hash, "utf-8")) 67 68 def acceso(request): 69 """! 70 Funcion que gestiona el acceso al sistema 71 72 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 73 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 74 @date 23-04-2016 75 @param request <b>{object}</b> Objeto que obtiene la petición 76 @return Redirecciona al usuario a la pagina correspondiente en caso de que se haya autenticado o no 77 """ 78 form = AutenticarForm() 79 80 if request.method == "POST": 81 form = AutenticarForm(data=request.POST) 82 83 if form.is_valid(): 84 username = "%s%s" % ( 85 request.POST['tipo_documento_0'], request.POST['tipo_documento_1'] 86 ) 87 88 usuario = authenticate(username=username, password=str(request.POST['clave'])) 89 90 if usuario is not None: 91 login(request, usuario) 92 usr = User.objects.get(username=username) 93 usr.last_login = datetime.now() 94 usr.save() 95 else: 96 logger.error(str(_("Error al autenticar el usuario [%s]") % username)) 97 98 logger.info(str(_("Acceso al sistema por el usuario [%s]") % username)) 99 return HttpResponseRedirect(urlresolvers.reverse("inicio")) 100 101 return render_to_response('base.template.html', {'form': form}, context_instance=RequestContext(request)) 102 103 104 def salir(request): 105 """! 106 Funcion que gestiona la salida del sistema 107 108 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 109 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 110 @date 23-04-2016 111 @param request <b>{object}</b> Objeto que contiene la petición 112 @return Redirecciona al usuario a la pagina de inicio, si fue desautenticado lo envia a la pagina de acceso 113 """ 114 user = request.user 115 if user.is_authenticated(): 116 logout(request) 117 118 logger.info("El usuario [%s] salio del sistema" % user) 119 120 return HttpResponseRedirect(urlresolvers.reverse("inicio")) 121 122 123 class RegistroCreate(SuccessMessageMixin, CreateView): 124 """! 125 Clase que registra usuarios en el sistema 126 127 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 128 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 129 @date 25-04-2016 130 @version 2.0.0 131 """ 132 model = User 133 form_class = RegistroForm 134 template_name = 'usuario.registro.html' 135 success_url = reverse_lazy('acceso') 136 success_message = REGISTRO_MESSAGE 137 138 def form_valid(self, form): 139 """! 140 Metodo que valida si el formulario es valido, en cuyo caso se procede a registrar los datos del usuario 141 142 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 143 @copyright GNU/GPLv2 144 @date 22-08-2016 145 @param self <b>{object}</b> Objeto que instancia la clase 146 @param form <b>{object}</b> Objeto que contiene el formulario de registro 147 @return Retorna el formulario validado 148 """ 149 150 self.object = form.save(commit=False) 151 self.object.username = form.cleaned_data['rif'] 152 self.object.first_name = form.cleaned_data['nombre'] 153 self.object.last_name = form.cleaned_data['apellido'] 154 self.object.set_password(form.cleaned_data['password']) 155 self.object.email = form.cleaned_data['correo'] 156 self.object.save() 157 158 ## Crea el perfil del usuario 159 UserProfile.objects.create( 160 nacionalidad=form.cleaned_data['tipo_documento'][0], 161 cedula=form.cleaned_data['tipo_documento'][1:], 162 cargo=form.cleaned_data['institucion'], 163 telefono=form.cleaned_data['ocupacion'], 164 user=self.object 165 ) 166 167 ## Asigna un enlace de verificación en el registro de usuarios 168 link = self.request.build_absolute_uri("%s?userid=%s&key=%s" % ( 169 urlresolvers.reverse('usuario.views.confirmar_registro'), 170 self.object.username, hash_user(self.object, is_new_user=True).decode() 171 )) 172 173 administrador, admin_email = '', '' 174 if settings.ADMINS: 175 administrador = settings.ADMINS[0][0] 176 admin_email = settings.ADMINS[0][1] 177 178 ## Indica si el correo electrónico fue enviado 179 enviado = enviar_correo(self.object.email, 'usuario.bienvenida.mail', EMAIL_SUBJECT_REGISTRO, { 180 'link': link, 'emailapp': settings.EMAIL_FROM, 'administrador': administrador, 'admin_email': admin_email 181 }) 182 183 if not enviado: 184 logger.warning( 185 str(_("Ocurrió un inconveniente al enviar el correo de registro al usuario [%s]") 186 % self.object.username) 187 ) 188 189 return super(RegistroCreate, self).form_valid(form)
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.