Tuesday, May 26, 2020

PROGRAMAS EN ENSAMBLADOR x86

Programa que despliega "Hola, mundo!!"

; HOLA.ASM
; Despliega una leyenda en pantalla.
STACK SEGMENT STACK ; Segmento de pila
DW 64 DUP (?) ; Define espacio en la pila
STACK ENDS
DATA SEGMENT ; Segmento de datos
SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
DATA ENDS
CODE SEGMENT ; Segmento de Código
ASSUME CS:CODE, DS:DATA, SS:STACK
INICIO: ; Punto de entrada al programa
MOV AX,DATA ; Pone dirección en AX
MOV DS,AX ; Pone la dirección en los registros
MOV DX,OFFSET SALUDO ; Obtiene dirección del mensaje
MOV AH,09H ; Función: Visualizar cadena
INT 21H ; Servicio: Funciones alto nivel DOS
MOV AH,4CH ; Función: Terminar
INT 21H
CODE ENDS
END INICIO ; Marca fin y define INICIO
view raw hola_mundo.asm hosted with ❤ by GitHub

Programa que pide tu nombre desde teclado y muestra un mensaje en consola saludandote.

include 'emu8086.inc'
ORG 100h
LEA SI, msg1 ; establece puntero (SI) a msg
; pregunta el numero
CALL print_string ; imprime mensaje que SI apunta
LEA DI, buffer ; configura el puntero (DI) para ingresar buffer
MOV DX, bufSize ; asigna tamano al buffer
CALL get_string ; obtiene nombre y lo pone en el buffer
LEA SI, newln ; apunta a CR/LF / Hello message
CALL print_string ; imprime mensaje que SI apunta
RET ; retorna al sistema operativo.
; data
msg1 DB "Enter your name: ", 0
newln DB 13, 10
DB "Hello, "
buffer DB 20 DUP (0) ; ingresa buffer para get_string
bufSize = $-buffer ; calcula el tamano del buffer
DEFINE_GET_STRING
DEFINE_PRINT_STRING
END ; directiva para detener el compilador
view raw tunombre.asm hosted with ❤ by GitHub
Programa que dibuje una diagonal en la pantalla.

mov cx,1
mov al, 13h
mov ah, 0
int 10h ; set graphics video mode.
bucle1:
mov dx, cx
mov al, color ;AL = pixel color
mov ah, 0ch ;Change color for a single pixel
int 10h ;set pixel
cmp cx, 101 ;llegar hasta 100 x 100 (va en diagonal)
jz fin
inc cx ;DX = row.
add color, 2 ;para cambiar colores
jmp bucle1 ;CX = column
fin:
ret
color db 1
view raw diagonal.asm hosted with ❤ by GitHub
Programa que lea un archivo y cuente cuántas palabras terminan con la letra a.

name "archivo3"
org 100h
mov al, 0 ;modo de acceso para abrir arhivo, modo lectura/escritura
mov dx, offset archivo ;offset lugar de memoria donde esta la variable
mov ah, 3dh ;se intenta abrir el archivo
int 21h ;llamada a la interrupcion DOS
jc error ; si se prendio la bandera c ir a error
mov handle, ax ;si no paso mover a lo que le dio el SO
jmp leer
error:
; ....
;leer archivo
leer:
mov bx, handle
mov cx, 1
mov dx, offset leido
mov ah, 3fh
int 21h
cmp ax, 0 ;ax queda en 0 cuando llega a EOF
jz FIN ;si es 0 entonces va a fin para cerrar archivo
;Detectar palabras que terminan con a
mov dl, leido[0]
cmp dl, " " ;comparar si es espacio
jz mostrar ;si es espacio entonces ir a mostrar
jmp abajo ;si no es espacio entonces ir a abajo
mostrar:
cmp aux, "a" ;compara si el anterior es a
jnz abajo
inc cont ;si es a entonces incrementar contador
abajo:
mov aux, dl ;guardar en aux lo que hay en dl para comparar en la proxima vuelta
jmp leer
FIN:
;cerramos archivo
mov bx, handle
mov ah, 3eh
int 21h
ret
archivo db "C:\HAZLO.txt", 0 ;ascii del nombre del archivo
leido db "$"
handle dw ? ;identificador del arhivo
aux db "$"
cont db 0
view raw letras.asm hosted with ❤ by GitHub
Programa que pide un numero desde teclado y lo muestra en la consola.

include 'emu8086.inc'
ORG 100h
LEA SI, msg1 ; pregunta por el numero
CALL print_string ;
CALL scan_num ; obtiene numero en CX.
MOV AX, CX ; copia numero al AX.
; imprime la siguiente cadena:
CALL pthis
DB 13, 10, 'Has ingresado: ', 0
CALL print_num ; imprime numero en AX.
RET ; retorna al sistema operativo.
; data
msg1 DB 'Ingresa numero: ', 0
; macros para definir procs
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS ; requerido para print_num.
DEFINE_PTHIS
END ; directiva para detener el compilador.
view raw numero.asm hosted with ❤ by GitHub
Programa para saber si un numero es mayor.

name "mayor"
mov AX, 5
mov BX, 5
;mov DX, AX
;CX el valor más grande entre AX Y BX
;AX-BX mayor a 0
sub AX,BX
js A_MENOR_B
mov CX,AX
jmp FIN
A_MENOR_B:
mov CX,BX
FIN:
;mov AX,DX
ret
view raw mayor.asm hosted with ❤ by GitHub
Programa que suma 2 números.

; sumar dos numeros binarios de 24bits y almacenar el resultado
; apartir de la localidad de memoria 0206h. (Los bits menos significativos
; de los numeros empiezan en las localidades 0200h y 0203h)
SUMA:
MOV AL, [200] ; Mover el contenido de la localidad 200 a AL
ADD AL, [203] ; Sumar la localidad 203 a AL
MOV [206], AL ; Mover a la localidad 206 el registro AL
MOV AL, [201] ; Mover la localidad 201 a AL
ADC AL, [204] ; Sumar la localidad 204 a AL
MOV [207], AL ; Mover AL a la localidad 207
MOV AL, [202] ; Mover la localidad 202 al registro AL
ADC AL, [205] ; Sumar la localidad 205 al registro AL
MOV [208], AL ; Mover el registro AL a la localidad 208
RET ; Retornar
MOV AH,4CH
INT 21h
view raw suma.asm hosted with ❤ by GitHub

Thursday, May 21, 2020

RESUMEN DE CSS3



CSS corresponde a las siglas de Cascade Style Sheet o Hojas de Estilos en Cascada en cristiano. Como indica su nombre CSS3 corresponde a la tercera revisión del mismo y los primeros módulos se convirtieron en recomendaciones oficiales de W3C en 2011.

La World Wide Web Consortium o W3C es la encargada de formular las especificaciones de las hojas de estilos que servirán de estándar para los navegadores o los agentes de usuario.

El CSS3 es el lenguaje utilizado para definir los estilos de los documentos HTML o XML. Su desarrolló partió de la idea de separar la estructura de un documento de su presentación, haciendo así mucho mas fácil su mantenimiento.

La información de los estilos puede ser definida en el mismo HTML con el elemento <style> o en un archivo separado con la terminación .css. Evidentemente, este último es el utilizado a día de hoy, precisamente aprovechando el fin para el que fue creado CSS, no mezclar el HTML con los estilos en un mismo documento y que resulte mucho mas fácil su mantenimiento.

El funcionamiento de CSS consiste en definir, mediante su propia sintaxis, el formato de presentación que se aplicará a un sitio web completo, una página o documento HTML, a una parte de un documento HTML o a una etiqueta en concreto.

Si por ejemplo tenemos una etiqueta H1 de título como esta:

<h1>Título de tu página</h1>

Podemos darle estilos de esta forma:

h1 {
font-size : 12px;
font-family : verdana;
text-decoration : underline;
text-align : left;
}

Con esto, le estaríamos dando un tamaño de fuente de 12 pixeles, un tipo de fuente Verdana, un subrayado y una alineación a la izquierda.

Características:

Bordes:
  • Colores múltiples de borde en un mismo lado
  • Imágenes de borde
  • Bordes redondeados
Fondos:
  • Fondos Múltiples pueden ser añadidos al mismo elemento como capas
  • Posicionamiento del fondo con mayor precisión
  • Pueden ser redimensionados
Color:
  • Opacidad
  • Gradientes
  • Valores de color: HSL
Text:
  • Sombras
  • Desbordamiento
  • Ajuste de línea
Transformaciones:
  • Escalar
  • Sesgar
  • Mover
  • Rotar en 2D o 3D
Transiciones:
  • Transición sencilla de estilos
Cajas:
  • Sombras
  • Cajas redimensionables
  • Overflow separado en vertical u horizontal
  • Compensación entre contorno y borde
  • Modelos para especifcar altura y anchura
Contenido:
  • Los estilos pueden añadir contenido a los elementos
Opacidad:
  • Los elementos pueden ser transparentes

INTRODUCCIÓN A HTML5 Y ETIQUETAS BÁSICAS


HTML5 (HyperText Markup Language, versión 5) es la quinta revisión del lenguaje HTML. Esta nueva versión (aún en desarrollo), define los nuevos estándares de desarrollo web, rediseñando el código para resolver problemas y actualizándolo así a nuevas necesidades. No se limita solo a crear nuevas etiquetas o atributos, sino que incorpora muchas características nuevas y proporciona una plataforma de desarrollo de complejas aplicaciones web (mediante los APIs).


HTML5 está destinado a sustituir no sólo HTML 4, sino también XHTML 1 y DOM Nivel 2. Esta versión nos permite una mayor interacción entre nuestras páginas web y el contenido media (video, audio, entre otros) así como una mayor facilidad a la hora de codificar nuestro diseño básico.

Algunas de las nuevas características de HTML5 serían:

  • Nuevas etiquetas semánticas para estructurar los documentos HTML, destinadas a remplazar la necesidad de tener una etiqueta <div> que identifique cada bloque de la página.
  • Los nuevos elementos multimedia como <audio> y <video>.
  • La integración de gráficos vectoriales escalables (SVG) en sustitución de los genéricos <object>, y un nuevo elemento <canvas> que nos permite dibujar en él.
  • El cambio, redefinición o estandarización de algunos elementos, como <a>, <cite> o <menu>.
  • MathML para fórmulas matemáticas.
  • Almacenamiento local en el lado del cliente.
  • Y otros muchos nuevos APIs que veremos a lo largo de los siguientes capítulos.


ETIQUETAS BÁSICAS

Este es un ejemplo de código de HTML5 de una página sencilla
<!DOCTYPE html>
<html lang="es">
<head>
<title>Título de la WEB</title>
<meta charset="UTF-8">
<meta name="title" content="Título de la WEB">
<meta name="description" content="Descripción de la WEB">
<link href="http://dominio.com/hoja-de-estilos.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<header>
<h1>Título de la WEB</h1>
</header>
<nav>
<a href="http://dominio.com/seccion2.html">IR SECCIÓN 2</a>
<a href="http://dominio.com/seccion2.html">IR SECCIÓN 3</a>
</nav>
<section>
<article>
<h2>CONTENIDO PRINCIPAL</h2>
<p>Este es el contenido principal de mi web</p>
<div>
<p>Aquí tenéis una imagen.</p>
<img src="http://dominio.com/imagen.jpg" alt="paisaje">
</div>
</article>
</section>
<aside>
<h3>Banner de publicidad</h3>
<a href="http://dominio-externo.com">
<img src="http://dominio.com/banner-publicidad.png" alt="banner de publicidad">
</a>
<h3>Testimonios</h3>
<p>Me gusta mucho esta página.</p>
</aside>
<footer>
<h4>Avisos legales</h4>
<a href="http://dominio.com/aviso-legal">Política de cookies</a>
<h4>Redes sociales</h4>
<a href="http://facebook.com/mi-pagina-de-facebook">Mi Facebook</a>
</footer>
</body>
</html>
view raw ejemplo.html hosted with ❤ by GitHub



  • DOCTYPE
<!DOCTYPE html>

La etiqueta doctype declara el tipo de documento, por lo que esta está señalando que este es un documento HTML.

  • HTML
<html></html>

Delimita el documento HTML.

  • HEAD
<head></head>

El elemento head delimita la cabecera del documento, entre sus etiquetas contiene información como scripts, metadatos, estilos, ubicación de documentos de estilos, título de la página, etc.

  • META
<meta name="description" content="Descripción de la WEB">

Las meta etiquetas se utilizan para identificar propiedades del documento como por ejemplo el autor, el título y la descripción que mostrarán los buscadores, etc.

  • META CHARSET
<meta charset="UTF-8">

Establece el tipo de codificación del documento.

  • META TITLE
<meta name="title" content="Título de la WEB">

Contiene el titulo que se mostrará en los buscadores.

  • META DESCRIPTION
<meta name="description" content="Descripción de la WEB">

Es el texto que se muestra bajo el título en los motores de búsqueda.

  • LINK
<link href="http://dominio.com/hoja-de-estilos.css" rel="stylesheet" type="text/css"/>

Esta etiqueta contiene un link a una hoja de estilos externa, la cual se utilizará en este documento.
Atributo a destacar

  • HREF
Especifica la url donde se localiza la hoja de estilo.

  • BODY
<body></body>

La etiqueta body delimita el cuerpo del documento y contiene todo aquello que podremos ver en nuestro navegador. Imágenes, textos, enlaces, video, etc…

  • HEADER
<header></header>

El contenido de esta etiqueta debe ser la cabecera de nuestra página donde se suele encontrar el título, el logotipo y poco más.

  • NAV
<nav></nav>

Esta etiqueta sirve para delimitar el menú de la página, donde colocaremos los enlaces internos para movernos entre nuestras diferentes secciones del sitio web.
  • A
<a href="http://dominio.com/seccion2.html">IR SECCIÓN 2</a>

Representa un enlace o hipervínculo.
  • HREF
Dirección URL hacia la que apunta el enlace.
H1, H2, H3, H4, H5, H6

<h1>Título de la WEB</h1>


<h2>CONTENIDO PRINCIPAL</h2>


<h3>Testimonios</h3>


<h4>Avisos legales</h4>

Estas etiquetas establecen los encabezados. Se organizan por niveles siendo H1 el más importante y H6 el menos importante.
  • SECTION
<section></section>

La etiqueta section engloba una sección de texto, imágenes y otros elementos que guardan cierta relación entre ellos. Normalmente siempre le podremos poner un título o encabezado.
  • ARTICLE
<article></article>

La etiqueta article se suele encontrar dentro de una etiqueta section y sirve para dividir y ordenar los contenidos en su interior.
  • DIV
<div></div>

Otra forma de dividir contenido para posteriormente aplicarle clases y modificar su estilo.
  • P
<p></p>

Entre las etiquetas P colocaremos un párrafo de texto.
  • IMG
<img src="http://dominio.com/imagen.jpg" alt="paisaje">

Esta etiqueta coloca una imagen en el documento mediante un enlace.


Posible resultado:



MI SEGUNDA APLICACIÓN CON DJANGO

Primero se va a crear el proyecto UniversidadInscripciones en el CMD con el siguiente comando:

django-admin startproject UniversidadInscripciones


Y para comprobar que sí se haya creado el proyecto, se abre el IDE de preferencia para Python, que en este caso se utiliza PyCharm y se abre el proyecto

File > Open > C:\ > UniversidadInscripciones


Una vez que el proyecto esté abierto, se comprueba que el framework creó automáticamente un marco de trabajo


El siguiente paso es crear la app de GestionAcademica para poder realizar el modelo, entre otras cosas.

django-admin startapp GestionAcademica


Y en PyCharm se comprueba que sí se creó la app.


También se pueden verificar si se escribe el siguiente comando en el CMD:

/dir


Ahora, se comienza en hacer que corra el servidor con el siguiente comando, para así, que proporciona una dirección http para la página.

python3 manage.py startserver


Se copia el link que proporcionó el servidor y se pega en el URL del navegador de preferencia.

NOTA: Se recomienda hacer primero las migraciones porque en algunas ocasiones no quiere funcionar el enlace.

Para eso, se sugiere que se hagan los dos siguientes comandos, porque si uno no detecta migraciones, el otro puede que sí, así que es mejor realizar las dos operaciones.

python3 manage.py migrate


python3 manage.py makemigrations


Se vuelve a correr el servidor y ahora sí se puede comprobrar que funciona el servidor.


Ahora, en PyCharm, se abre el archivo settings.py para agregar la app para que sea reconocida, ya que si no se agrega, no puede funcionar.


Posteriormente, en el archivo de models.py es donde se va a escribir el código, haciendo 3 clases siendo a la vez 3 tablas para la base de datos.


Este es el código completo:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class Alumno(models.Model):
Apellido_Paterno = models.CharField(max_length=35)
Apellido_Materno = models.CharField(max_length=35)
Nombres = models.CharField(max_length=35)
DNI = models.CharField(max_length=8)
Fecha_Nacimiento = models.DateField()
SEXOS = (('F', 'Femenino'), ('M', 'Masculino'))
sexo = models.CharField(max_length=1, choices=SEXOS, default='M')
Email = models.EmailField(max_length=75)
#foto=models.ImageField(upload_to='photos')
#def NombreCompleto(self):
# cadena = "{0} {1} {2}"
# return cadena.format(self.Apellido_Paterno,self.Apellido_Materno,self.Nombres)
#def __str__(self):
# return self.NombreCompleto()
class Curso(models.Model):
Nombre = models.CharField(max_length=30)
Estado = models.BooleanField(default=True)
Creditos = models.PositiveIntegerField(default=1)
#def __str__(self):
# return "{0} -> {1}".format(self.Nombre,self.Creditos)
class Matricula(models.Model):
Alumno = models.ForeignKey(Alumno, null=False, blank=False, on_delete=models.CASCADE)
Curso = models.ForeignKey(Curso, null=False, blank=False, on_delete=models.CASCADE)
FechaMatricula = models.DateTimeField(auto_now=True)
#def __str__(self):
# cadena= "{0} inscrito en: {1}"
# return cadena.format(self.Alumno, self.Curso)
view raw models2.py hosted with ❤ by GitHub
Asimismo, en el archivo de admin.py se van a registrar el nombre de las clases (tablas) para así poder administrarlas en el servidor.


# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib import admin
#Register your models here.
from .models import Alumno
from .models import Curso
from .models import Matricula
admin.site.register(Alumno)
admin.site.register(Curso)
admin.site.register(Matricula)
view raw admin.py hosted with ❤ by GitHub


Hay que tener en cuenta que para cualquier edición o cambio que se haga, se tiene que hacer las migraciones para que detecte las actualizaciones.

NOTA: Para poder detener el servidor es con CTRL + C.

Como se aclaró al principio, a veces un comando para las migraciones no detecta las modificaciones, por lo que es necesario y muy importante realizar las dos operaciones.

python3 manage.py migrate


python3 manage.py makemigrations


Para que ya logremos manipular las tablas y poder llenarlas de datos, se tiene que hacer un súper usuario.

python3 manage.py createsuperuser


Una vez hecho eso, se vuelve a correr el servidor 

python3 manage.py runserver

y en la parte del url se escribe /admin para poder ingresar con el usuario que se creó.


Esta es la página donde se muestra las clases/ tablas que se crearon en el archivo de models.py, ahora lo único que falta hacer es hacer registros para cada uno.


Alumnos



Curso



Matrícula


Para que no aparezca "Alumno object", "Curso objetc" y "Matricula object", se va a quitar como comentarios las siguientes lineas en el archivo models.py

Para Alumnos:


Para Curso:


Para Matrícula:


Todo esto es para que se muestre el nombre de cualquier registro que se haya agregado.
Se hacen migraciones.
Se corre el servidor.


Ahora, en SQLiteManager se comprueba que en la base de datos sí se guardaron los registros en las tablas.

Exitosamente se muestran las tablas en la base de datos.


GestionAcademica_alumno


GestionAcademica_curso


GestionAcademica_matricula



Tuesday, May 19, 2020

MI PRIMERA APLICACIÓN CON DJANGO

En este post se va explicar cómo crear una página web con el framework Django.

Primero se tiene que crear el proyecto a través del CMD de la siguiente manera:




Ahí mismo se van a crear los modelos para la aplicación, escribiendo el siguiente comando:



Se puede comprobar que se creó el proyecto en el IDE para Python, que en este caso se utiliza PyCharm.

File > Open > C:\ > Alumnos


Una vez que el proyecto abierto, se puede observar que también incluye la aplicación que se creó en el CMD.

Recordando que todos los archivos son formato .py porque el Django está hecho con Python.



De la misma manera también se pueden ver esos mismos archivos a través del CMD:



Ahora se tiene que poner a correr el servidor y que nos proporciona una dirección HTTP para poder iniciar la app web.


Muestra un mensaje que existen 17 migraciones de archivos que no se han aplicado. Es necesario hacerlo para que corra bien la página y para eso se hacen los siguientes comandos:

python3 manage.py migrate

python3 manage.py makemigrations


Una vez hechas las migraciones, se vuelve a correr el servidor.


En el navegador de preferencia, se pega en el buscador el HTTP que nos proporcionó el servidor, mostrando lo siguiente, queriendo decir que está listo para usarse:




NOTA: Es necesario tener abierto el CMD en todo el momento que se esté utilizando el servidor, de lo contrario, deja de funcionar y no se podrá seguir manipulándolo. 

Para empezar a manipular la página, es necesario tener una cuenta de súper usuario. Si se escribe la dirección http://127.0.0.1:8000/admin, se mostrará un formulario pidiendo un usuario y contraseña que por el momento todavía no se ha creado. 



Para ello, se tiene que escribir el siguiente comando en el CMD y automáticamente se van a pedir una serie de datos necesarios para la creación del súper usuario, es muy importante no olvidar los datos que se registran (debe de ser dentro de la carpeta del proyecto).

python3 manage.py createsuperuser


NOTA: Recordar que se tiene que volver a correr el servidor.

Una vez completado los datos que pide, ahora sí hay que ingresar el usuario y contraseña que se crearon en el formulario del /admin. Una vez hecho eso, se muestra la página principal del perfil.



Ahora, en esta parte se va explicar cómo tener nuestro propio formulario con datos de Alumnos egresados de una universidad. Es necesario saber cuántas tablas queremos en la base de datos y saber los tipos de datos correctos para Django. Es muy recomendable leer la documentación que nos proporciona la página oficial de Django.

Asimismo, debemos de utilizar un manejador de base de datos de SQLite. En esta ocasión, se va utilizar el SQLiteManager que se podrá descargar en este aquí.

Lo primero que hay que hacer es editar el archivo models.py para ahí poder crear las tablas y campos con los datos que queremos que llene el alumno egresado.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.core.validators import RegexValidator
from django.db import models
# Create your models here.
class DatosPersonalesEgresado (models.Model):
Numero_de_Control=models.CharField(max_length=10,primary_key=True)
Fecha_de_Registro=models.DateField()
Apellido_Paterno= models.CharField(max_length=35)
Apellido_Materno = models.CharField(max_length=35)
Nombres= models.CharField(max_length=35)
Fecha_de_Nacimiento=models.DateField()
SEXOS= (('M','Masculino'), ('F','Femenino'))
sexo=models.CharField(max_length=1,choices=SEXOS,default='M')
Calle=models.CharField(max_length=50)
Entre_calles=models.CharField(max_length=50)
No_Int=models.CharField(blank= True,max_length=5)
No_Ext=models.CharField(max_length=5)
Colonia=models.CharField(max_length=20)
CP=models.CharField(max_length=5, validators=[RegexValidator(r'^\d{1,5}$')])
Ciudad=models.CharField(max_length=15)
Estado=models.CharField(max_length=15)
País=models.CharField(max_length=20)
Teléfono_Casa=models.CharField(max_length=10, validators=[RegexValidator(r'^\d{1,10}$')])
Celular=models.CharField(max_length=10, validators=[RegexValidator(r'^\d{1,10}$')])
Email=models.EmailField(max_length=75)
Edad=models.CharField(max_length=2, validators=[RegexValidator(r'^\d{1,2}$')])
ESTADOCIVIL= (('Solt', 'Soltero'), ('Cas', 'Casado'), ('Div', 'Divorciado'), ('Separado', 'Separado'),
('Viu', 'Viudo'), ('Union', 'Union Libre'))
Estado_Civil=models.CharField(max_length=10,choices=ESTADOCIVIL,default='Solt')
#foto=models.ImageField(upload_to='photos')
class DatosCarrera (models.Model):
NumControl = models.CharField(max_length=10, primary_key=True)
CARRERAS = (('CP', 'Contador Público'), ('IA', 'Ingeniería Ambiental'), ('IC', 'Ingeniería Civil'), ('IEM', 'Ingeniería Electromecánica'),
('IM', 'Ingeniería Mecatrónica'), ('IGE', 'Ingeniería Gestion Empresarial'), ('II', 'Ingeniería Industrial'),
('IQ', 'Ingeniería Química' ), ('ISC', 'Ingeniería Sistemas Computacionales'),
('IGA', 'Ingeniería Ambiental'),('Admon', 'Licenciatura Administración'))
Carrera=models.CharField(max_length=40,choices=CARRERAS)
MES = (('ENE', 'Enero'), ('FEB', 'Febrero'), ('MAR', 'Marzo'), ('ABR', 'Abril'), ('MAY', 'Mayo'), ('JUN', 'Junio'),
('JUL', 'Julio'), ('AGO', 'Agosto'), ('SEP', 'Septiembre'), ('OCT', 'Octubre'), ('NOV', 'Noviembre'),
('DIC', 'Diciembre'))
Fecha_Ingreso_Mes = models.CharField(max_length=40,choices=MES,default='ENE')
Año_Ingreso= models.CharField(max_length=4, validators=[RegexValidator(r'^\d{1,4}$')])
Fecha_Egreso_Mes = models.CharField(max_length=40,choices=MES,default='ENE')
Año_Egreso= models.CharField(max_length=4, validators=[RegexValidator(r'^\d{1,4}$')])
CICLOS = (('15va Generacion', '2015-2018'), ('16va Generacion', '2016-2019'), ('17va Generacion', '2017-2020'),
('18va Generacion', '2018-2021'), ('19va Generacion', '2019-2022'), ('20va Generacion', '2020-2023'))
Ciclo_Escolar_Egreso = models.CharField(max_length=20, choices=CICLOS, default='2020-2023')
Numero_Años_De_Licenciatura= models.CharField(max_length=1, validators=[RegexValidator(r'^\d{1,1}$')],default='3')
Numero_Semestres_Cursados = models.CharField(max_length=2, validators=[RegexValidator(r'^\d{1,1}$')],default='9')
view raw models.py hosted with ❤ by GitHub



Este es el código de las tablas sobre los datos personales y carreras de los alumnos egresados.


En el archivo de admin.py se van a registrar y administrar las tablas creadas.


Y en el archivo de settings.py se va agregar el nombre de la app para que la reconozca.


Después de haber modificado todo el código y haber editado algunos detalles, se tiene que volver hacer la acción de migrar, es decir, una actualización para que se muestre satisfactoriamente.


Ya en la página web se muestran las tablas para llenarlas con datos.


Tabla de los datos de la carrera:



Ahora con la tabla de datos personales del egresado:




Con el SQLiteManager se va a comprobrar que sí se registraron en la base de datos.