Mostrando entradas con la etiqueta Django. Mostrar todas las entradas
Mostrando entradas con la etiqueta Django. Mostrar todas las entradas

lunes, 1 de abril de 2019

3. Proyecto Universidad | App GestionAcademica

Proyecto Universidad con app GestionAcademica

Empecemos por crear el proyecto Universidad y aplicación GestionAcademica, utiliza el comando:

Para crear proyecto:


django-admin startproject nombre_proyecto

Para crear aplicación:


django-admin startapp nombre_app



Damos de alta la app GestionAcademica en la sección Universidad/settings/INSTALLED_APPS, así indicamos que nuestra app trabaje con el proyecto, agrega lo siguiente:




Modelo

Ahora creamos el modelo que contiene tres tablas Alumno, Curso y Matricula


Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
# Create your models here.

class Alumno(models.Model):
    ApellidoPaterno = models.CharField(max_length= 35)
    ApellidoMaterno = models.CharField(max_length= 35)
    Nombres = models.CharField(max_length= 35)
    DNI = models.CharField(max_length= 8)
    FechaNacimiento = models.DateField()
    SEXOS = (('F','Femenino'),('M','Masculino'))
    sexo = models.CharField(max_length= 1,choices= SEXOS, default='M')

    def NombreCompleto(self):
        cadena="{0} {1} , {2}"
        return cadena.format(self.ApellidoPaterno,self.ApellidoMaterno,self.Nombres)

    def __str__(self):
        return self.NombreCompleto()


class Curso(models.Model):
    Nombre = models.CharField(max_length= 50)
    Creditos = models.PositiveSmallIntegerField(default= 1)
    Estado = models.BooleanField(default= True)
    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_add = True)

    def __str__(self):
        cadena="{0} inscrito en: {1}"
        return cadena.format(self.Alumno,self.Curso.Nombre)




Dimos formato de presentación con el metodo __str__



Con esto se presentara con "nombre del curso" seguido de total de "créditos".



Ahora en Universidad/admin.py se agrega los modelos.

Código:


# -*- 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)



Una vez terminado, vamos a crear los modelos y migrar.


python manage.py makemigrations



python manage.py migrate



Ahora si corremos el servidor con el comando python manage.py runserver



Haz creado con éxito en tu navegador ingresa a la siguiente dirección http://127.0.0.1:8000/.


Para administrar, modificar y agregar los datos en nuestra base de datos, vamos a crear un superusuario.

python manage.py createsuperuser 



De nuevo corre el servidor y ve a http://127.0.0.1:8000/admin, con tu usuario y contraseña que registraste.



Visualizamos nuestra aplicación con nuestros 3 modelos.

Tablas

Nos quedara de esta manera:

Alumno
Con el método __str__


Como podemos ver utilizamos el método y visualizamos en el orden que vemos.



Curso







Matricula











domingo, 31 de marzo de 2019

3. Aplicación egresados


Realizamos la creación de un proyecto alumnos y aplicación egresados. 

Comando: django-admin startproject nombre_proyecto


Comando: django-admin startproject nombre_aplicacion




Una vez hecho esto, realiza el modelo en el editor pycharm como se muestra y agregamos a installed_apps 'egresados' la app:

Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
class egresados(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True, null=False,
                                verbose_name="Numero de control")
    Nombre = models.CharField(max_length=50)
    Apellido = models.CharField(max_length=30)
    SEXO = (('F', 'Femenino'), ('M', 'Masculino'), ('N','Ninguno'))
    sexo = models.CharField(max_length=1, choices = SEXO, default ='ninguno')
    Edad = models.IntegerField(help_text='Mayor de Edad')
    Fecha_nacimiento = models.DateField()
    CARRERA_CHOICES = (
    ('CP','Contador Publico'),
    ('IA','Ing. Ambiental'),
    ('IC','Ing. Civil'),
    ('IE','Ing. Electronica'),
    ('IME', 'Ing. Electromecanica'),
    ('ISC', 'Ing. en Sistemas Comp.'),
    ('IGE', 'Ing. en Gestion Empresarial.'),
    ('LAE', 'Lic. en Administración de Empresas'),
    ('IE','Ing. Quimica'),
    ('IM', 'Ing. Mecatronica')
    )
    carrera_choices = models.CharField(max_length=35, choices=CARRERA_CHOICES, default='IS')
    Activo = models.BooleanField(verbose_name= 'Trabaja actualmente',help_text='Marca si es asi')
    Trabajo = models.BooleanField(verbose_name= 'Trabaja en el area de su carrera')
    Lugar_de_trabajo = models.CharField(max_length=50, null = True, default='Ninguno')
    Ingreso_Mensual = models.IntegerField(null = True)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()
    Foto = models.ImageField(db_column="image",upload_to=BASE_DIR+"/media/imagenes",
                             verbose_name="Subir Imagen",default="")
    Archivo = models.FileField(db_column="File",upload_to= BASE_DIR+"/media/archivos",
                             verbose_name="Subir Archivo", default="")


Editor:




Para que nos guarde la imagen en una carpeta, se ingresa el siguiente código en alumnos/settings.py, puede ir al final mientras no interfiere con el resto:

Código:

MEDIA_ROOT = '/'
MEDIA_URL = '/media/'



Para tener el url y ver la imagen, en alumnos/urls.py:

Código:


from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

if settings.DEBUG:
   urlpatterns+= static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)





Para crear el modelo, por consola ejecutamos los siguientes comandos:


 python manage.py makemigrations


python manage.py migrate



No olvides agregar el modelo en egresados/admin.py, se agrega en esta ocasiona el 

código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin

from.models import egresados
admin.site.register(egresados)





Ya terminado, ahora corremos el servidor:

python manage.py runserver

Ve a la dirección: http://127.0.0.1:8000/admin/, y accede. No olvides crear usuario por consola con el siguiente comando:

python manage.py createsuperusuario





Como se muestra ya esta nuestro modelo 'egresados'.



Registramos datos:



Opciones que se muestran, en caso del campo sexo, si no seleccionamos, entonces por default se queda en ninguno.



Para subir una imagen o archivo:









Ya tenemos en carpetas separadas lo que va en Imagen y Archivo.


Se muestra una dirección donde esta la imagen o archivo, damos click se abre la imagen.


Nos redirige y podemos verla en el navegador.


jueves, 28 de marzo de 2019

2. Proyecto alumnos: Cambios en el modelo (parte 2)

Modificación del modelo

Tipos de Campos, atributos (argumentos)

Un modelo puede tener un número arbitrario de campos, de cualquier tipo.

Previamente se había creado un proyecto Alumnos con aplicación datos_per, en esta ocasión se le agregará cambios en el modelo.


Original

Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Datospersonales(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True)
    Nombre = models.CharField(max_length=50)
    Sexo = models.CharField(max_length=1)
    Edad = models.IntegerField()
    Fecha_nacimiento = models.DateField()
    Carrera = models.CharField(max_length=30)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()





Se creo un modelo en datos_per/models, con los siguientes tipos de campos, el modelo tiene lo siguiente:


Tipos de campos

  • CharField se usa para definir cadenas de longitud corta a media. Debes especificar la max_length (longitud máxima) de los datos que se guardarán.
  • TextField se usa para cadenas de longitud grande o arbitraria. Puedes especificar una max_length para el campo, pero sólo se usa cuando el campo se muestra en formularios (no se fuerza al nivel de la base de datos).
  • IntegerField es un campo para almacenar valores de números enteros y para validar los valores introducidos como enteros en los formularios.
  • DateField y DateTimeField se usan para guardar/representar fechas e información fecha/hora (como en los objetos Python datetime.date  y datetime.datetime, respectivamente). Estos campos pueden adicionalmente declarar los parámetros (mutuamente excluyentes) auto_now=True (para establecer el campo a la fecha actual cada vez que se guarda el modelo), auto_now_add (para establecer sólo la fecha cuando se crea el modelo por primera vez), y default (para establecer una fecha por defecto que puede ser sobreescrita por el usuario).
  • EmailField se usa para validar direcciones de correo electrónico.
  • FileField e ImageField se usan para subir ficheros e imágenes respectivamente (el ImageField añade simplemente una validación adicional de que el fichero subido es una imagen). Éstos tienen parámetros para definir cómo y donde se guardan los ficheros subidos.
  • AutoField es un tipo especial de IntegerField que se incrementa automáticamente. Cuando no especificas una clave primaria para tu modelo, se añade -automáticamente- una de éste tipo.
  • ForeignKey se usa para especificar una relación uno a muchos con otro modelo de la base de datos (ej. un coche tiene un fabricante, pero un fabricante puede hacer muchos coches). El lado "uno" de la relación es el modelo que contiene la clave.
  • ManyToManyField se usa para especificar una relación muchos a muchos (ej. un libro puede tener varios géneros, y cada género puede contener varios libros). En nuestra aplicación de la biblioteca usaremos ésta de forma muy similar a ForeignKeys, pero pueden usarse de formas más complicadas para describir las relaciones entre grupos. Éstas tienen el parámetro on_delete para definir que ocurre cuando un registro asociado se borra (ej. un valor de models. SET_NULL establecería simplemente el valor a NULL).
  • BooleanField: permite guardar información del tipo verdadero o falso, en la base de datos se guarda respectivamente un 1 (verdadero) o un 0 (falso) según corresponda. Este campo se despliega en pantalla como un checkbox.
  • DurationField: permite agregar tiempos de duración en formato de Días horas: minutos: segundos eje 3 d 2:20:20 esto es 3 días con 20h con 20m y 20 segundos.
  • EmailField: permite introducir correos electrónicos, este campo es verificado automáticamente por django
  • URLField: permite almacenar direcciones de Internet.
  • FilePathField: permite almacenar una ruta a un archivo en el disco local del servidor, en pantalla es mostrado como una lista desplegable donde aparecen los nombres de cada archivo.

Argumentos de los campos

  • help_text: Proporciona una etiqueta de texto para formularios HTML (ej. en el sitio de Administración), tal como se describe arriba.
  • verbose_name: Nombre de fácil lectura que se usa en etiquetas para el campo. Si no se especifica, Django inferirá el valor por defecto del verbose name a partir del nombre del campo. Establece el nombre de la etiqueta
  • default: Valor por defecto para el campo. Puede ser un valor o un callable object (objeto que puede ser llamado como una función), en cuyo caso el objeto será llamado cada vez que se cree un nuevo registro.
  • null: Si es True, Django guardará valores en blanco o vacíos como NULL en la base de datos para campos donde sea apropiado (un CharField guardará una cadena vacía en su lugar). Por defecto es False, permite que el campo sea guardado en la base sin contenido ingresado por el usuario y en la base de datos se guardara NULL como valor.
  • blank: Si es True, se permite que el campo quede en blanco en tus formularios. El valor por defecto es False, lo que significa que la validación de formularios de Django te forzará a introducir un valor. Con frecuencia se usa con null=True, porque si vas a permitir valores en blanco, también querrás que la base de datos sea capaz de representarlos de forma apropiada.
  • choices: Un grupo de valores de selección para este campo. Si se proporciona, el widget correspondiente por defecto del formulario será una caja de selección con estos valores de selección en vez del campo de texto estándar.
  • primary_key: Si es True, establece el campo actual como clave primaria para el modelo (Una clave primaria es una columna especial de la base de datos, diseñada para identificar de forma única todos los diferentes registros de una tabla). Si no se especifica ningún campo como clave primaria, Django añadirá automáticamente un campo para este propósito.
  • db_column: establece el nombre que puede ser asignado a la columna de la tabla en la base de datos
  • unique: permite la verificación del campo en la BD, de manera que no puedan introducirse valores repetidos.

Para campos de texto:

  • max_lenght: establece el maximo de caracteres que el campo puede admitir.

Para campos de archivo:
  • upload_to: establece la ruta en disco donde el servidor deberá guardar los archivos subidos a la plataforma.

Para campos con numéricos decimales:
  • max_digits: establece el máximo de cifras permitidas por el campo
  • decimal_places: establece el máximo de cifras decimales permitidas por el campo.


Nuevo

Código:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Datospersonales(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True, verbose_name='Número de control')
    Nombre = models.CharField(max_length=50)
    SEXO = (('F', 'Femenino'), ('M', 'Masculino') )#arreglo
    #Sexo = models.CharField(max_length=1, choices=SEXO)
    Edad = models.IntegerField(help_text='Solo mayores de edad')
    Fecha_nacimiento = models.DateField()
    #Lista de Opciones en un Campo:
    #Carrera = models.CharField(max_length=30, choices=carrera_choices,default = IS,)
    IS = 'IS'
    LC = 'LC'
    LAE = 'LAE'
    CARRERA_CHOICES = (('IS', 'Ing. en Sistemas'),
   ('IS', 'Ing. en Sistemas'), ('LAE', 'Lic. en Administración de empresas'))
    carrera_choices = models.CharField(max_length=7, choices = CARRERA_CHOICES, default = IS)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()




Al correr el servidor.

Mensaje de help_text


Lista de carreras.



El modelo consta de los siguientes campos:

Num_cont es un campo CharField que guarda cadena de caracteres alfanuméricos, cuenta con el argumento max_length que establece la longitud del campo, primary_key = True establece como clave primaria y verbose_name = 'Nombre del campo etiqueta'.
En el campo sexo es una arreglo con dos opciones F y M.
Tenemos un arreglo con varias de las carreras, con choice para la selección, valor por default.
help_text permite dar un mensaje de restricciones o advertencia.


Después de haber realizado las modificaciones correspondientes, en consola, realizamos una migración con el comando, creamos el modelo :


python manage.py makemigrations





Se muestra que se removió Carrera, pero ahora esta establecida se agrego como arreglo carrera_choices, se realizo cambios en Edad y Num_cont.

Y finalmente creamos las tablas correspondientes en la base de dato que tengamos dada de alta en el apartado database en el archivo settings:


python manage.py migrate




Ahora podemos seguir agregando mas opciones de carrera, en el arreglo para dr





Ejecutamos el comando:


Vemos la actualización de carrera_choices. Ahora se migra lo últimos cambios.


Ahora corremos el servidor para ver los cambios.







Referencias:

https://developer.mozilla.org/es/docs/Learn/Server-side/Django/Models 

https://www.evernote.com/shard/s663/client/snv?noteGuid=fb8bb589-ac4e-47a1-820b-0c11ac1c5e0a&noteKey=8fccea01ec279129&sn=https%3A%2F%2Fwww.evernote.com%2Fshard%2Fs663%2Fsh%2Ffb8bb589-ac4e-47a1-820b-0c11ac1c5e0a%2F8fccea01ec279129&title=django%2BAlumnos

Unidad 3 Configuración y administración del espacio en disco.(Investigacion)

Configuración y administración del espacio en disco. Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien ...