0% found this document useful (0 votes)
45 views

Django

This document provides instructions for mapping an existing MySQL database to a Django project. It describes using the inspectdb management command to generate Django model code based on the database schema. The generated models may require cleaning and customization, such as refactoring many-to-many relationships, removing redundant id fields, changing field types, and reordering models to define relationships properly. The document also provides tips for handling issues like reserved field names, primary keys, and foreign keys. Overall, it outlines the process of integrating an existing database by generating initial models from inspectdb and then cleaning them up.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views

Django

This document provides instructions for mapping an existing MySQL database to a Django project. It describes using the inspectdb management command to generate Django model code based on the database schema. The generated models may require cleaning and customization, such as refactoring many-to-many relationships, removing redundant id fields, changing field types, and reordering models to define relationships properly. The document also provides tips for handling issues like reserved field names, primary keys, and foreign keys. Overall, it outlines the process of integrating an existing database by generating initial models from inspectdb and then cleaning them up.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

crear el entorno virtual

python -m venv venv

activar el entorno virtual


cd myvenv
cd Scripts
activate

si muestra el siguiente error (windows 10)

.\activate : No se puede cargar el archivo C:\myvenv\Scripts\Activate.ps1 porque la


ejecución de scripts está deshabilitada en este sistema. Para obtener más información,
consulta el
tema about_Execution_Policies en https:/go.microsoft.com/fwlink/?LinkID=135170.
En línea: 1 Carácter: 1
+ .\activate
+ ~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

la solucion es

1. Start Windows PowerShell with the "Run as Administrator" option. Only members of
the Administrators group on the computer can change the execution policy.

2. Enable running unsigned scripts by entering:


set-executionpolicy remotesigned

instalar django
python -m pip install django

instalar psycopg
python -m pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org
--trusted-host pypi.python.org psycopg2

ver los paquetes que hay instalados


python -m pip freeze
version django
python -m django --version

Creando un proyecto¶
django-admin startproject mysite

El servidor de desarrollo¶
python manage.py runserver

Creando la aplicación encuestas


python manage.py startapp polls

Escriba su primera vista


polls/views.py¶
from django.http import HttpResponse

def index(request):

return HttpResponse("Hello, world. You're at the polls index.")

polls/urls.py¶
from django.urls import path

from . import views

urlpatterns = [
path('', views.index, name='index'),

mysite/urls.py¶
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]

You have now wired an index view into the URLconf. Verify it’s working with the following
command:

python manage.py runserver

http://localhost:8000/polls/

Configuración de la base de datos¶


mysite/settings.py¶

...

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
}
}

...

Instale las tablas principales de Django


python manage.py migrate

Creando modelos¶

polls/models.py¶
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')

class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)

votes = models.IntegerField(default=0)

Para incluir la aplicación en nuestro proyecto necesitamos agregar una referencia a su clase de
configuración en la configuración INSTALLED_APPS. La clase PollsConfig está en el archivo
polls/apps.py por lo que su ruta punteada es 'polls.apps.PollsConfig'.

mysite/settings.py¶
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

Al ejecutar makemigrations, usted le indica a Django que ha realizado algunos cambios a sus
modelos (en este caso, ha realizado cambios nuevos) y que le gustaría que los guarde como una
migración.

python manage.py makemigrations polls

A continuación, ejecute de nuevo el comando migrate para crear esas tablas modelos en su
base de datos:

python manage.py migrate

la guía de tres pasos para hacer cambios de modelo:

● Cambie sus modelos (en models.py).


● Ejecute el comando python manage.py makemigrations para crear migraciones para
esos cambios
● Ejecute el comando python manage.py migrate para aplicar esos cambios a la base
de datos.
El metodo __str__()

polls/models.py¶

from django.db import models

class Question(models.Model):

# ...

def __str__(self):

return self.question_text

class Choice(models.Model):

# ...

def __str__(self):

return self.choice_text

Creando un usuario del admin¶

python manage.py createsuperuser

A continuación, abra un navegador Web y vaya a http://127.0.0.1:8000/admin/.

Haga que la aplicación encuesta se pueda modificar en el sitio


administrativo¶

polls/admin.py¶

from django.contrib import admin


from .models import Question

admin.site.register(Question)
Empleo de inspectdb
La utilidad inspectdb realiza una introspección de la base de datos a la que apunta tu
archivo de configuración, determina una representación del modelo que usará
Django para cada una de tus tablas, e imprime el código Python del modelo a la
salida estándar.

Esta es una guía de un proceso típico de integración con una base de datos
existente desde cero. Las únicas suposiciones son que Django esta instalado y
tienes una base de datos existente.

1. Crea un proyecto Django django-admin startproject mysite (donde mysite es el


nombre de tu proyecto). Usaremos mysite como nombre de proyecto en este
ejemplo.

2. Edita el archivo de configuración en ese proyecto, mysite/settings.py, para decirle


a Django cuáles son los parámetros de conexión a tu base de datos y cuál es su
nombre. Específicamente, provee las configuraciones de DATABASE_NAME,
DATABASE_ENGINE, DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, y DATABASE_PORT.
(Ten en cuenta que algunas de estas configuraciones son opcionales. Mira el
Capítulo 5 para más información).

3. Crea una aplicación dentro de tu proyecto ejecutando python


mysite/manage.py startapp myapp (donde myapp es el nombre de tu aplicación).
Usaremos myapp como el nombre de aplicación aquí.

4. Ejecuta el comando python mysite/manage.py inspectdb. Esto examinará las


tablas en la base de datos DATABASE_NAME e imprimirá para cada tabla el modelo de
clase generado. Hecha una mirada a la salida para tener una idea de lo que puede
hacer inspectdb.

5. Guarda la salida en el archivo models.py dentro de tu aplicación usando la


redirección de salida estándar de la shell:

$ python mysite/manage.py inspectdb > mysite/myapp/models.py

6. Edita el archivo mysite/myapp/models.py para limpiar los modelos generados y


realiza cualquier personalización necesaria. Te daremos algunas sugerencias para
esto en la siguiente sección.
16.1.2. Limpiar los modelos generados
Como podrías esperar, la introspección de la base de datos no es perfecta, y
necesitarás hacer una pequeña limpieza al código del modelo resultante. Aquí hay
algunos apuntes para lidiar con los modelos generados:

1. Cada tabla de la base de datos es convertida en una clase del modelo (es decir,
hay un mapeo de uno-a-uno entre las tablas de la base de datos y las clases del
modelo). Esto significa que tendrás que refactorizar los modelos para tablas con
relaciones muchos-a-muchos en objetos ManyToManyField.

2. Cada modelo generado tiene un atributo para cada campo, incluyendo campos de
clave primaria id. Sin embargo, recuerda que Django agrega automáticamente un
campo de clave primaria id si un modelo no tiene una clave primaria. Por lo tanto,
querrás remover cualquier línea que se parezca a ésta:

id = models.IntegerField(primary_key=True)

No solo estas líneas son redundantes, sino que pueden causar problemas si tu
aplicación agregara nuevos registros a estas tablas. El comando inspectdb no puede
detectar si un campo es autoincrementado, así que está en tí cambiar esto a
AutoField, si es necesario.

3. Cada tipo de campo (ej., CharField, DateField) es determinado mirando el tipo de


la columna de la base de datos (ej., VARCHAR, DATE). Si inspectdb no puede mapear un
tipo de columna a un tipo de campo del modelo, usará TextField e insertará el
comentario Python 'This field type is a guess.' a continuación del campo en el
modelo generado. Mantén un ojo en eso, y cambia el tipo de campo adecuadamente
si es necesario.

Si un campo en tu base de datos no tiene un buen equivalente en Django, con


seguridad puedes dejarlo fuera. La capa de modelo de Django no requiere que
incluyas todos los campos de tu(s) tabla(s).

4. Si un nombre de columna de tu base de datos es una palabra reservada de Python


(como pass, class o for), inspectdb agregará '_field' al nombre del atributo y
establecerá el atributo db_column al nombre real del campo (ej., pass, class, o for).

Por ejemplo, si una tabla tiene una columna INT llamada for, el modelo generado
tendrá un campo como este:
for_field = models.IntegerField(db_column='for')

inspectdb insertará el comentario Python 'Field renamed because it


was a Python reserved word.' a continuación del campo.

5. Si tu base de datos contiene tablas que hacen referencia a otras tablas (como la
mayoría de las bases de datos lo hacen), tal vez tengas que re-acomodar el orden de
los modelos generados, de manera que los modelos que hacen referencia a otros
modelos estén ordenados apropiadamente. Por ejemplo, si un modelo Book tiene una
ForeignKey al modelo Author, el modelo Author debe ser definido antes del modelo
Book. Si necesitas crear una relación en un modelo que todavía no esta definido,
puedes usar el nombre del modelo, en vez del objeto modelo en sí.

6. inspectdb detecta claves primarias para PostgreSQL, MySQL y SQLite. Es decir,


inserta primary_key=True donde sea necesario. Para otras bases de datos,
necesitarás insertar primary_key=True para al menos un campo en cada modelo, ya
que los modelos Django requieren tener un campo primary_key=True.

7. La detección de claves foráneas sólo funciona con PostgreSQL y con ciertos tipos
de tablas MySQL. En otros casos, los campos de clave foránea serán generados
como campos IntegerField, asumiendo que la columna de clave foránea fue una
columna INT.
Mapear una base de datos MySQL

Crear el proyecto

django-admin startproject institute

Parametros de conexion a la BD

editar institute/institute/settings

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
}
}

django a español

en este mismo archivo (settings), cambiar la linea:

LANGUAGE_CODE = 'es'

Crear una aplicación

cd institute/

creamos una aplicación (llamada core)

python manage.py startapp core


Instalar el modulo para trabajar con MySQL

python -m pip install mysqlclient

Si muestra error de compilación, instalar

sudo apt-get install libmysqlclient-dev


sudo apt-get install build-essential
sudo apt-get install python3-dev

MySQL Error: : 'Access denied for user 'root'@'localhost'


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

Crear los modelos de las tablas

python manage.py inspectdb > .\core\models.py

NOTA: puede ser que agregue espacio o caracteres al principio del archivo models.py, lo
que provoca un error al momento de correr el makemigrations o el migrate

Agregar la aplicación en el archivo settings

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core.apps.CoreConfig',
]

Haga que la aplicación en el sitio administrativo

core/admin.py

from django.contrib import admin


from .models import Users

admin.site.register(Users)

● Creating a view
● Creating the template which use to the view
● Adding a path to urls.py

La aplicación auth de Django proporciona vistas para iniciar y cerrar sesión. Agregar
esto a nuestro proyecto será un proceso de dos pasos:

1. Registro de las vistas en el user URLConf


2. Agregar plantillas para las vistas

Si proporciona inicio / cierre de sesión, cambio de contraseña y restablecimiento de


contraseña, puede usar URLConf de auth como se muestra en el siguiente
fragmento de código

from django.contrib.auth import urls

app_name = 'user'
urlpatterns = [
path(‘’, include(urls)),
]

You might also like