Beruflich Dokumente
Kultur Dokumente
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.
--------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;
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.
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
....
Volvemos a la carpeta django_test y aquí vamos a instalar Django, para ello usamos:
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
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
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',
],
},
},
]
<!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/
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-----------------------
class LocalidadCreateView(CreateView):
model = Localidad
success_url = reverse_lazy('localidad_list')
fields = ['nombre'] # Campos que se permiten modificar
template_name = 'maestro/localidad/form.html'
{% 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----------------------
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 %}
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'),
]
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', HomeView.as_view(), name='inicio'),
url(r'^maestros/', include(maestro_urls)),
]
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 %}