carga
carga
This commit is contained in:
0
autenticacion/__init__.py
Normal file
0
autenticacion/__init__.py
Normal file
3
autenticacion/admin.py
Normal file
3
autenticacion/admin.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
5
autenticacion/apps.py
Normal file
5
autenticacion/apps.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AutenticacionConfig(AppConfig):
|
||||
name = 'autenticacion'
|
||||
36
autenticacion/forms.py
Normal file
36
autenticacion/forms.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.forms import UserCreationForm
|
||||
from .models import perfil
|
||||
|
||||
|
||||
class UserForm(UserCreationForm):
|
||||
first_name = forms.CharField()
|
||||
last_name = forms.CharField()
|
||||
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('first_name','last_name', 'username', 'email', 'password1' ,'password2' )
|
||||
|
||||
|
||||
class Formperfil(forms.ModelForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Formperfil, self).__init__(*args, **kwargs)
|
||||
self.fields['key'].widget.attrs['readonly'] = True
|
||||
self.fields["key"].widget = forms.HiddenInput()
|
||||
self.fields['usuario'].widget.attrs['readonly'] = True
|
||||
self.fields["usuario"].widget = forms.HiddenInput()
|
||||
|
||||
class Meta:
|
||||
model = perfil
|
||||
fields = ('usuario', 'matricula', 'cuatrimestre', 'grupo', 'direccion', 'genero', 'telefono', 'tipo', 'id_carrera', 'foto', 'key')
|
||||
|
||||
|
||||
class FormperfilEnv(forms.ModelForm):
|
||||
class Meta:
|
||||
model = perfil
|
||||
fields = ('matricula', 'cuatrimestre', 'grupo', 'direccion', 'genero', 'telefono', 'tipo', 'id_carrera', 'foto')
|
||||
|
||||
|
||||
|
||||
41
autenticacion/migrations/0001_initial.py
Normal file
41
autenticacion/migrations/0001_initial.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# Generated by Django 4.0.5 on 2022-06-27 13:26
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('universidad', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='perfil',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('matricula', models.CharField(max_length=50, unique=True, verbose_name='Matricula ó CURP')),
|
||||
('cuatrimestre', models.CharField(blank=True, max_length=2, null=True, verbose_name='Cuatrimestre')),
|
||||
('grupo', models.CharField(choices=[('A', 'A'), ('B', 'B'), ('C', 'C'), ('D', 'D')], default='A', max_length=1, verbose_name='Grupo')),
|
||||
('direccion', models.CharField(blank=True, max_length=250, null=True, verbose_name='Domicilio')),
|
||||
('telefono', models.CharField(blank=True, max_length=15, null=True, verbose_name='Telefono')),
|
||||
('genero', models.CharField(choices=[('Estudiante', 'Estudiante'), ('Docente', 'Docente'), ('Administrativo', 'Administrativo'), ('Visitante', 'Visitante')], default='Estudiante', max_length=20, verbose_name='Genero')),
|
||||
('foto', models.ImageField(blank=True, upload_to='foto/')),
|
||||
('qr', models.ImageField(blank=True, upload_to='qr/')),
|
||||
('fecha_alta', models.DateField(auto_now_add=True, verbose_name='Fecha alta')),
|
||||
('fecha_actualizacion', models.DateField(auto_now=True, verbose_name='Fecha de Actualización')),
|
||||
('id_carrera', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='universidad.carrera', verbose_name='Carrera')),
|
||||
('usuario', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'perfil',
|
||||
'verbose_name_plural': 'perfiles',
|
||||
'ordering': ['matricula'],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 4.0.5 on 2022-07-19 04:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('autenticacion', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='perfil',
|
||||
name='tipo',
|
||||
field=models.CharField(choices=[('Estudiante', 'Estudiante'), ('Docente', 'Docente'), ('Administrativo', 'Administrativo'), ('Visitante', 'Visitante')], default='Estudiante', max_length=20, verbose_name='Genero'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='perfil',
|
||||
name='genero',
|
||||
field=models.CharField(choices=[('M', 'M'), ('F', 'F')], default='M', max_length=1, verbose_name='Genero'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 4.0.5 on 2022-07-19 06:48
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('autenticacion', '0002_perfil_tipo_alter_perfil_genero'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='perfil',
|
||||
name='key',
|
||||
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='Key'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='perfil',
|
||||
name='tipo',
|
||||
field=models.CharField(choices=[('Estudiante', 'Estudiante'), ('Docente', 'Docente'), ('Administrativo', 'Administrativo'), ('Visitante', 'Visitante')], default='Estudiante', max_length=20, verbose_name='Tipo'),
|
||||
),
|
||||
]
|
||||
18
autenticacion/migrations/0004_alter_perfil_cuatrimestre.py
Normal file
18
autenticacion/migrations/0004_alter_perfil_cuatrimestre.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.0.5 on 2022-07-23 23:52
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('autenticacion', '0003_perfil_key_alter_perfil_tipo'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='perfil',
|
||||
name='cuatrimestre',
|
||||
field=models.IntegerField(default=0, verbose_name='Cuatrimestre'),
|
||||
),
|
||||
]
|
||||
20
autenticacion/migrations/0005_alter_perfil_cuatrimestre.py
Normal file
20
autenticacion/migrations/0005_alter_perfil_cuatrimestre.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Generated by Django 4.0.5 on 2022-07-24 00:19
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('universidad', '0002_ncuatrimestre'),
|
||||
('autenticacion', '0004_alter_perfil_cuatrimestre'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='perfil',
|
||||
name='cuatrimestre',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='universidad.ncuatrimestre', verbose_name='Cuatrimestre'),
|
||||
),
|
||||
]
|
||||
18
autenticacion/migrations/0006_alter_perfil_cuatrimestre.py
Normal file
18
autenticacion/migrations/0006_alter_perfil_cuatrimestre.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.0.5 on 2022-07-24 00:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('autenticacion', '0005_alter_perfil_cuatrimestre'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='perfil',
|
||||
name='cuatrimestre',
|
||||
field=models.CharField(choices=[('0', '0'), ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), ('9', '9'), ('10', '10')], default=0, max_length=2, verbose_name='Cuatrimestre'),
|
||||
),
|
||||
]
|
||||
0
autenticacion/migrations/__init__.py
Normal file
0
autenticacion/migrations/__init__.py
Normal file
59
autenticacion/models.py
Normal file
59
autenticacion/models.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
import os
|
||||
from tinymce import models as tinymce_models
|
||||
from model_utils import Choices
|
||||
import qrcode
|
||||
from io import BytesIO
|
||||
from django.core.files import File
|
||||
from PIL import Image, ImageDraw
|
||||
from universidad.models import carrera
|
||||
|
||||
# Create your models here.
|
||||
|
||||
class perfil(models.Model):
|
||||
TIPO = Choices('Estudiante', 'Docente', 'Administrativo', 'Visitante')
|
||||
GENERO = Choices('M', 'F')
|
||||
GRU = Choices('A','B','C','D')
|
||||
CUATRI = Choices('0','1','2','3','4','5','6','7','8','9','10')
|
||||
usuario = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
|
||||
matricula = models.CharField(max_length=50, unique=True, null=False, blank=False, verbose_name='Matricula ó CURP')
|
||||
cuatrimestre = models.CharField(choices=CUATRI, default=0, max_length=2, verbose_name='Cuatrimestre')
|
||||
grupo = models.CharField(choices=GRU, default=GRU.A, max_length=1, verbose_name='Grupo')
|
||||
direccion = models.CharField(max_length=250, null=True, blank=True, verbose_name='Domicilio')
|
||||
genero = models.CharField(choices=GENERO, default=GENERO.M, max_length=1, verbose_name='Genero')
|
||||
telefono = models.CharField(max_length=15, null=True, blank=True, verbose_name='Telefono')
|
||||
tipo = models.CharField(choices=TIPO, default=TIPO.Estudiante, max_length=20, verbose_name='Tipo')
|
||||
id_carrera = models.ForeignKey(carrera, on_delete=models.CASCADE, null=False, blank=False, verbose_name='Carrera')
|
||||
foto = models.ImageField(upload_to='foto/', blank=True)
|
||||
qr = models.ImageField(upload_to='qr/', blank=True)
|
||||
fecha_alta = models.DateField(auto_now_add=True, verbose_name='Fecha alta')
|
||||
fecha_actualizacion = models.DateField(auto_now=True, verbose_name='Fecha de Actualización')
|
||||
key = models.CharField(max_length=250, null=True, blank=True, verbose_name='Key')
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
if os.path.isfile(self.foto.path):
|
||||
os.remove(self.foto.path)
|
||||
super(perfil, self).delete(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return self.matricula
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
data = self.key
|
||||
key = ''.join(ch for ch in data if ch.isalnum())
|
||||
qr_image = qrcode.make(key)
|
||||
qr_offset = Image.new('RGB',(480, 480),'white')
|
||||
qr_offset.paste(qr_image)
|
||||
files_name = f'{self.matricula}qr.png'
|
||||
stream = BytesIO()
|
||||
qr_offset.save(stream, 'PNG')
|
||||
self.qr.save(files_name, File(stream), save=False)
|
||||
qr_offset.close()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'perfil'
|
||||
verbose_name_plural = 'perfiles'
|
||||
ordering = ['matricula']
|
||||
3
autenticacion/tests.py
Normal file
3
autenticacion/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
76
autenticacion/views.py
Normal file
76
autenticacion/views.py
Normal file
@@ -0,0 +1,76 @@
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.views.generic import View
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import login, logout, authenticate
|
||||
from .forms import UserForm
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
|
||||
def acceder(request):
|
||||
if request.method == "POST":
|
||||
form = AuthenticationForm(request, data=request.POST)
|
||||
if form.is_valid():
|
||||
nombre_usuario = form.cleaned_data.get("username")
|
||||
password = form.cleaned_data.get("password")
|
||||
usuario = authenticate(username=nombre_usuario, password=password)
|
||||
if usuario is not None:
|
||||
login(request, usuario)
|
||||
messages.success(request, F"Bienvenid@ de nuevo {nombre_usuario}")
|
||||
return redirect("index")
|
||||
else:
|
||||
messages.error(request, "Los datos son incorrectos")
|
||||
else:
|
||||
messages.error(request, "Los datos son incorrectos")
|
||||
|
||||
form = AuthenticationForm()
|
||||
return render(request, "acceder.html", {"form": form})
|
||||
|
||||
|
||||
# Create your views here.
|
||||
class VistaRegistro(View):
|
||||
def get(self, request):
|
||||
form = UserForm()
|
||||
return render(request, "registro.html", {"form": form})
|
||||
|
||||
|
||||
def post(self, request):
|
||||
form = UserForm(request.POST)
|
||||
if form.is_valid():
|
||||
post = form.save(commit=False)
|
||||
post.save()
|
||||
return redirect("index")
|
||||
else:
|
||||
for field, items in form.errors.items():
|
||||
for item in items:
|
||||
messages.error(request, '{}: {}'.format(field, item))
|
||||
return render(request, "registro.html", {"form": form})
|
||||
|
||||
|
||||
|
||||
def salir(request):
|
||||
logout(request)
|
||||
messages.success(request, F"Tu sesion se ha cerrado correctamente")
|
||||
return redirect("index")
|
||||
|
||||
|
||||
def usuarios(request):
|
||||
datos = User.objects.all()
|
||||
return render(request, 'usuarios.html', {"datos": datos})
|
||||
|
||||
|
||||
@login_required(login_url='/acceder')
|
||||
def userupdate(request, id):
|
||||
instance= get_object_or_404(User, pk=id)
|
||||
form = UserForm(request.POST or None, instance=instance)
|
||||
context= {'form': form}
|
||||
if form.is_valid():
|
||||
obj= form.save(commit= False)
|
||||
obj.save()
|
||||
messages.success(request, "El usuario fue actualizado")
|
||||
return redirect("usuarios")
|
||||
|
||||
else:
|
||||
context= {'form': form, 'error': 'Error al actualizar'}
|
||||
return render(request,'usuariosupdate.html' , context)
|
||||
Reference in New Issue
Block a user