Sie sind auf Seite 1von 7

Se sugiere usar un sistema Unix como Ubuntu.

Tecnologías necesarias:
python 2.7 https://www.python.org/downloads/
Django 1.11.12
Como entorno de trabajo recomiendo PyCharm o usar alguno que permita fácilmente la importación
de los módulos.

Instalación del servidor:


Tras instalar python, se tendrá acceso a los comandos virtualenv y pip. Algunos comandos cambian
de un entorno a otro.

--------Windows------
Comprobar que tenemos python accesible desde línea de comandos, llamando a python. Si accede a
la consola podemos continuar. En caso contrario acceder a las
variables de entorno del sistema y añadir la localización al Path. Estas tres localizaciones pueden ser
un ejemplo de lo que habría que añadir al path:
C:\Python27;
C:\Python27\Scripts;
C:\Python27\Lib\site-packages;

Crear entorno Virtual


acceder a una carpeta y dentro hacer:
virtualenv django_test
Otra forma sería
python -m virtualenv django_test

Con esto se generaría un entorno que limita los paquetes que se usarán, lo que facilita su montaje en
otros equipos.
El arbol tendrá el siguiente aspecto

/django_test
/Scripts
/Include
/Lib
....

Tras crear el entorno habría que activarlo, para ello se accede a la carpeta Scripts y se llama a
activate.
(Desde consola)
Scripts\activate

----Unix-----------
Comprobar que tenemos instalado python, llamando al comando python desde consola, sino instalar
a través del gestor de paquetes del sistema.

Crear entorno Virtual


acceder a una carpeta y dentro hacer:
virtualenv django_test

Con esto se generaría un entorno que limita los paquetes que se usarán, lo que facilita su montaje en
otros equipos.
El arbol tendrá el siguiente aspecto

/django_test
/bin
/include
/lib
....

Activar el entorno con:


source bin/activate

---------------- Común ---------------------


Si todo ha ido correctamente, aparecerá la palabra (django_test) a la izquierda de la consola.

Volvemos a la carpeta django_test y aquí vamos a instalar Django, para ello usamos:

pip install Django==1.11.12


Cuando termine, se tendrá acceso a comandos de django, que ayudarán a crear el proyecto y los
posibles módulos.
Comandos necesarios:

django-admin startproject nombre_proyecto # Crea proyecto


django-admin startapp nombre_app # Crea aplicación con estructura básica
./manage.py createsuperuser # Crea un superusuario en la base de datos
./manage.py makemigrations # Crea las migraciones de los modelos generados
./manage.py migrate # Crea las tablas y cambios en la base de datos
./manage.py runserver # Lanza la aplicación

pip freeze > requirements.txt


Una vez se termine el proyecto, con este comando volcamos todas las dependencias a un fichero
llamado requirements.txt una de las líneas que podrían aparecer sería Django==1.11.12

Tutoriales y páginas a tener en cuenta (Comprobar que abajo a la derecha está la opción de
documentación versión 1.11)
https://docs.djangoproject.com/es/1.11/intro/tutorial01/
La idea es crear un proyecto simple donde se almacenen los clientes, la localidad a la que
pertenecen y un listado de los trabajos que tienen pendientes.
Los modelos a crear serán:

Localidad
- Nombre

Cliente
- Razón Social
- Razón Fiscal
- Localidad a la que pertenece

Trabajo
- Texto
- Cliente al que pertenece

Clave ajena en tabla localidad = models.ForeignKey(Localidad, on_delete=models.CASCADE)

Estos modelos se crearán dentro del módulo 'maestro', para ello, una vez creado el proyecto con
startproject django_test (nombre de ejemplo), se accede a la
carpeta generada y dentro se hace django-admin startapp maestro

Estos modelos se crean dentro del fichero models.


Ejemplo modelos https://docs.djangoproject.com/es/1.11/intro/tutorial02/#creating-models

Cuando estén los modelos, dentro del fichero settings.py se añade el módulo creado dentro de
INSTALLED_APPS, para ello se añade 'maestro' al listado
Para añadir a la base de datos los nuevos modelos se usan los comandos antes mencionados
llamados makemigrations y migrate.

Para las plantillas a usar, dentro de settings.py se modifica el apartado TEMPLATES y dentro de
DIRS se añade el nombre de la carpeta, que por ejemplo será 'plantillas'
Esta carpeta está al nivel de todas las carpetas, por ejemplo:

/django_test
....
/django_test
/django_test
settings.py
/maestro
/plantillas
/localidad
/cliente
/trabajo
base.html

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'plantillas'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
],
},
},
]

Plantilla base (dentro de plantillas)


base.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

Ahora vamos a crear un sistema CRUD (Create, Read, Update and Delete) de cada modelo. Para
ello se usarán vistas basadas en clases.
Vistas a usar:

ListView
CreateView
DetailView
UpdateView
DeleteView
https://docs.djangoproject.com/es/1.11/ref/class-based-views/

En cada sección hay algún ejemplo.


Lo más basico de cada uno sería:
-------------------ListView---------------------
from django.views.generic.list import ListView

from maestro.models import Localidad

class LocalidadListView(ListView):
model = Localidad
context_object_name = 'localidades' # Nombre que tendrá la variable
en el listado
template_name = 'maestro/localidad/list.html' # Plantilla a usar
{% extends 'base.html' %}

{% block content %}
<a href="{% url 'inicio' %}">Inicio</a>
<ul>
{% for localidad in localidades %}
<li>
{{ localidad.nombre }} <a href="{% url 'localidad_edit' localidad.pk %}">Editar</a> <a
href="{% url 'localidad_delete' localidad.pk %}">Borrar</a>
</li>
{% endfor %}
</ul>
<a href="{% url 'localidad_new' %}">Nueva Localidad</a>
{% endblock %}
-----------------CreateView-----------------------

from django.views.generic.edit import CreateView


from maestro.models import Localidad

class LocalidadCreateView(CreateView):
model = Localidad
success_url = reverse_lazy('localidad_list')
fields = ['nombre'] # Campos que se permiten modificar
template_name = 'maestro/localidad/form.html'

Dentro del form.html podría haber:

{% extends 'base.html' %}

{% block content %}
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Guardar" />
</form>
{% endblock %}

Ó
{% extends 'base.html' %}

{% block content %}
<form action="" method="post">
{% csrf_token %}

<div class="form-group">
<label for="id_nombre">Nombre</label>
<input type="text" id="id_nombre" name="nombre"
value="{{ form.nombre.value }}">
</div>
<input type="submit" value="Guardar" />
</form>
{% endblock %}

-----------------UpdateView----------------------
from django.views.generic.edit import UpdateView
from maestro.models import Localidad

class LocalidadUpdateView(UpdateView):
model = Localidad
success_url = reverse_lazy('localidad_list')
fields = ['nombre'] # Campos que se permiten modificar
template_name = 'maestro/localidad/form.html'

---------------DeleteView----------------------
from django.views.generic.edit import DeleteView
from django.urls import reverse_lazy
from maestro.models import Localidad

class LocalidadDeleteView(DeleteView):
model = Localidad
success_url = reverse_lazy('localidad_list')
template_name = 'maestro/localidad/delete.html'

{% extends 'base.html' %}

{% block content %}
<form action="" method="post">
{% csrf_token %}
<p>Está seguro de querer borrar la localidad "{{ object }}"?</p>
<input type="submit" value="Confirmar" />
</form>
{% endblock %}

-------------DetailView----------------------

from django.views.generic.detail import DetailView

from maestro.models import Localidad

class LocalidadDetailView(DetailView):
model = Localidad
template_name = 'maestro/localidad/detail.html'

ejemplo html

{% extends 'base.html' %}

{% block content %}
<p>
<p>Nombre: {{ object.nombre }}</p>
</p>
{% endblock %}

--------------------- Rutas ----------------------


Ejemplo de fichero urls.py dentro de maestro
------------
from django.conf.urls import url
from maestro import localidad

urlpatterns = [
url(r'^localidades/$', localidad.LocalidadListView.as_view(), name='localidad_list'),
url(r'^localidades/new$', localidad.LocalidadCreateView.as_view(), name='localidad_new'),
url(r'^localidades/edit/(?P<pk>\d+)$', localidad.LocalidadUpdateView.as_view(),
name='localidad_edit'),
url(r'^localidades/delete/(?P<pk>\d+)$', localidad.LocalidadDeleteView.as_view(),
name='localidad_delete'),
url(r'^localidades/view/(?P<pk>\d+)$', localidad.LocalidadDetailView.as_view(),
name='localidad_view'),
]

Configuración del fichero urls.py dentro de django_test


-----------
from django.conf.urls import url, include
from django.contrib import admin
from maestro import urls as maestro_urls
from views import HomeView

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', HomeView.as_view(), name='inicio'),
url(r'^maestros/', include(maestro_urls)),
]

----- Fichero views.py dentro de django_test


from django.views.generic import TemplateView

class HomeView(TemplateView):
template_name = 'index.html'

{% extends 'base.html' %}

{% block content %}
<ul>
<li><a href="{% url 'localidad_list' %}">Listado de localidades</a></li>
</ul>
{% endblock %}

Das könnte Ihnen auch gefallen