domingo, 31 de marzo de 2019

UNIDAD 2

Conexion de Django a MySQL

Iniciamos creando un proyecto con django como anteriormente lo habiamos hecho, con el comando django-admin startproject Conexion

Una vez creado el proyecto,necesitamos de un archivo que hara la conexion entre MySQL y Django.
https://drive.google.com/open?id=1CkQEMMJs63YDupFxmvE9d4_ha8v2ZCJs

Una vez que ya tengas este archivo, vas a colocarlo dentro de la carpeta que se genera al hacer tu proyecto, y despues vamos a instalar este mismo archivo desde el cmd

Una vez en el cmd, copiamos el nombre del archivo y con pip comenzamos a instalar lo necesario para la conexion con mysql


Una vez que ya se haya instalado correctamente, creamos con MySQL una base de datos. En mi caso usare el IDE de MySQL para que se pueda apreciar la sintaxis y su ejecucion de mejor manera, aunque se puede hacer todo desde la consola de comandos.


Ejecutamos la primera linea de esas tres sintaxis para que se cree la base de datos que vamos a utilizar. Posteriormente, vamos a editar el archivo de nuestro proyecto en Django con el nombre de 'Settings' para integrar la base de datos que hemos creado.


Una vez que se haya configurado esta parte, vamos de regreso a nuestro cmd a ejecutar una migracion para que nos cree las tablas de nuestro proyecto.


Al hacer esto, automaticamente dentro de la base de datos que antes habiamos creado se integraran las tablas correspondientes a lo que es el proyecto.
Volviendo a MySQL, corremos una instruccion de show tables para poder ver que efectivamente s encuentran ahi las tablas.




Caracteristicas de un DBMS

Un sistema de gestión de bases de datos (SGBD; en inglés, Database Management System: DBMS) es un conjunto de programas que permite a los usuarios crear y mantener una base de datos.
Si bien, no es imprescindible contar con un SGBD para implementar una base de datos, este software de uso general facilita el proceso de definir, construir y manipular bases de datos para diversas aplicaciones.

Algunas de sus caracteristicas son:
  • Control de redundancia
  • Restriccion de accesos no autorizados
  • Cumplimiento de las restricciones de integridad
  • Respaldo y recuperacion,etc.

RESTRICCIÓN DE LOS ACCESOS NO AUTORIZADOS.
Cuando muchos usuarios comparten una misma base de datos, es probable que no todos tengan la autorización para tener acceso a toda la información que contiene. El SGBD debe contar con un subsistema de seguridad y autorización que permita al DBA crear cuentas y especificar restricciones para ellas.

CUMPLIMIENTO DE LAS RESTRICCIONES DE INTEGRIDAD.

La mayor parte de las aplicaciones de base de datos tienen ciertas restricciones de integridad que deben cumplir los datos. El SGBD debe ofrecer recursos para definir tales restricciones y hacer que se cumplan.

RESPALDO Y RECUPERACIÓN

Todo SGBD debe contar con recursos para recuperarse de fallos de hardware o de software. Para ello está el subsistema de respaldo y recuperación del SGBD. Por ejemplo, si el sistema falla mientras se está ejecutando un complejo programa de actualización, el subsistema de recuperación se encargará de asegurarse de que la base de datos se restaure al estado en el que estaba antes de que comenzara la ejecución del programa.

CONTROL DE REDUNDANCIA
En la creación tradicional de programas de archivos, cada grupo de usuarios mantiene sus propios archivos para manejar sus aplicaciones de procesamiento de datos. Supongamos la situación para una base de datos de un supermercado. Los grupos involucrados serían, entre otros, el de finanzas y el de reposición. Con el enfoque tradicional, cada sector mantendría archivos independientes para los proveedores, cada uno con un objetivo distinto. Buena parte de los datos se almacenarían dos veces.
 
Para esto es que, dentro del DBMS podemos crear o usar las ayudas que se tienen para detener este tipo de problemas.

Algunas otras características:


  • Independencia física: El nivel físico puede ser modificado independientemente del nivel conceptual. Esto significa que el usuario no puede ver todos los componentes de hardware de la base de datos, que es simplemente una estructura transparente para representar la información almacenada.

  • Independencia lógica: El nivel conceptual debe poder modificarse sin alterar el nivel físico. En otras palabras, el administrador de la base de datos debe poder introducir mejoras sin afectar la experiencia de los usuarios

  • Facilidad de uso: Las personas que no estén familiarizadas con la base de datos deben poder describir su consulta sin hacer referencia a los componentes técnicos de la base de datos.
  • Acceso rápido: El sistema debe poder responder a las consultas lo más rápido posible. Esto requiere algoritmos de búsqueda rápidos.

  • Administración centralizada: El DBMS debe permitirle al administrador manipular los datos, agregar elementos y verificar su integridad de manera centralizada.

  • Redundancia controlada: El DBMS debe poder evitar la redundancia de datos siempre que sea posible, tanto para minimizar los errores como para prevenir el desperdicio de memoria.

  • Verificación de integridad: Los datos deben ser internamente coherentes y, cuando algunos elementos hacen referencia a otros, estos últimos deben estar presentes.

  • Uso compartido de datos: El DBMS debe permitir que múltiples usuarios accedan simultáneamente a la base de datos.

  • Seguridad de los datos: El DBMS debe poder administrar los derechos de acceso a los datos de cada usuario.
Se le han realizado algunas modificaciones a lo que originalmente teniamos como la aplicacion de datos_per. Hasta ahora, la configuracion se puede ver algo como esto:


En si, lo que se ha hecho hasta ahora es agregar al campo de num_cont un atributo llamado verbose_name. Esto nos funciona para cambiar la forma en que se mostrara el nombre del campo en nuestra aplicacion.
Es decir, en lugar de ver num cont en la aplicacion, veremos lo que se le ha asignado con el parametro verbose_name.

En el campo de sexo, hemos limitado la opcion a dos: Masculino o Femenino.
Esto por medio de un arreglo que contenga ambos sexos y por medio del parametro choices damos de alta ese arreglo que antes se habia creado.
Por otro lado, tenemos tambien el parametro default,que simplemente nos sirve para asignar un valor predeterminado segun las preferencias del programador de la aplicacion.

Posteriormente, en edad asignamos un mensaje al usuario por medio del parametro hepl_text. Esto nos permite dar un mensaje al usuario para que sepa que este campo tiene ciertas restricciones que debe considerar antes de llenarlo.

Y finalmente, de igual manera hemos creado un arreglo en donde ingresamos varias carreras para su elección por medio de una lista desplegable como en el campo sexo.
Aqui a diferencia de el otro campo, colocamos como valor predeterminado alguna de las carreras que se han dado de alta en nuestro arreglo.
Para que estos cambios sean aplicados a nuestro modelo original, corremos los siguientes comandos en la pantalla del cmd.



Finalmente, podemos correr el servidor de nuestro proyecto y ver los cambios que se han realizado:

Aqui podemos ver la lista desplegable del campo sexo(y el valor por defecto que le hemos dado) y el texto de ayuda en edad


La lista de carreras que hemos dado de alta


Registro de una nueva entrada con los cambios ya realizados

CAMPOS EN MODELOS
CAMPODESCRIPCION
CharFieldTipo de campo para cadena de caracteres alfanumericos
TextFieldSe usa para cadenas de longitud grande o arbitraria.
IntegerFieldCampo para almacenar vaores de numeros enteros y para validar los valores introducidos como enteros en los formularios
DataField y DataTimeFieldSe utilizan para guardar/representar fechas e informacion de fecha/hora.
EmailFieldSe usa para validar direcciones de correo electronico
FileField e ImageFieldSe usan para subir ficheros e imagenes. Solo ImageField añade una validacion adicional de que el fichero subido es una imagen
AutoFieldTipo de campo especial de IntegerField que se incrementa automaticamente. Cuando no especificamos una clave primaria para el modelo, se añade automaticamente una de este tipo
ForeignKeySe utiliza para especificar una relacion uno a muchos con otro modelo de la base de datos
ManyToManyFieldSe usa para especificar una relacion muchos a muchos.
BinaryFieldUn campo para guardar datos binarios. Solo soporta asignacion de bytes
BooleanFieldCampo de verdadero/falso
CommaSeparatedIntegerFieldCampo de enteros separados por comas. Asi como en el campo CharField, se requiere el argumento max_length
DecimalFieldUn campo preciso de numeros decimales, representado en python como una instancia decimal. Requiere los argumentos max_digits y decimal_places.
FilePathFieldUn CharField que sus opciones son limitadas a los nombres de archivos en ciertas direcciones en el sistema.
SlugFieldSlug es un termino de periodico. Un Slug es una etiqueta corta para algo, conteniendo solo letras, numeros,guiones bajos o guiones. Son usados generalmente en las URLs
URLFieldCampo de tipo CharField para una URL.
OneToOneFieldUna relacion de uno a uno. Conceptualmente, esto es similar a una ForeignKey con el argumento unique=True.



PARAMETROS EN MODELOS
PARAMETRODESCRIPCION
max_lengthEstablece la longitud maxima del valor de este campo
help_textProporciona una etiqueta de texto para mostrar que ayuda a los usuarios a saber que colocar en el campo
verbose_nameModifica el nombre del campo a mostrar
defaultValor por efecto para el campo. Puede ser un valor o un callable object(objeto que puede ser llamada como una funcion)
nullSi es True, Django guardara valores en blanco o vacios como NULL. Por defecto es FALSE
blankSi es True, se permite que el campo quede en blanco en los formularios. El valor por defecto es False, lo que significa que la validacion de formularios de Django te forzara a instroducir un valor.
choicesUn grupo de valores de seleccion para este campo
primary_keySi es True, establece el campo actual como clave primaria para el modelo. Si no se especifica ningun campo como clave,Django añadira automaticamente un campo para este proposito
editableSi es falso, el campo no se desplegara en el apartado de admin o en cualquier otra forma. Tambien se saltara durante la validacion del modelo. Por defecto es True
uniqueSi es True, el campo debera ser unico en toda la tabla
auto_now_addse utiliza con DataField y DataTimeField para establecer solo la fecha cuando se crea el modelo por primera vez
auto_nowSi es True, establece en el campo la fecha actual cada vez que se guarda el modelo. Se utiliza con DataField o DataTimeField
set_nullEstablece un campo como NULL
on_deleteDefine que ocurre cuando un registro asociado se borra. Se utiliza con MannyToManyField
pathRequerido en FilePathField. La direccion de donde el campo obtendra sus opciones "/hime/images"