Conjunto fd1bfc1 en sapic


Ignorar:
Fecha y hora:
30/10/2017 15:03:54 (hace 7 años)
Autor:
Erwin Paredes <eparedes@…>
Branches:
master, erwin, explicacion_situacional
Children:
f837b9d
Parents:
e11d965
Mensaje:

actualizacion de curso_django.tex

Fichero:
1 editado

Leyenda

No modificado
Añadido
Eliminado
  • curso_django/curso_django.tex

    re11d965 rfd1bfc1  
    10761076\end{frame}
    10771077
     1078\subsection{Geodjango}
     1079\begin{frame}[fragile]
     1080\begin{verbatim}
     1081Para la gestión de datos geolocalizados debe utilizar
     1082una extensión de django denominada Geodjango
     1083
     1084Instalación de componentes para la gestión de mapas
     1085en particular la extensión django.contrib.gis
     1086
     1087Entrar como root para la instalacion
     1088
     1089aptitude install python3.4 python3-pip python3.4-dev
     1090python3-setuptools
     1091
     1092aptitude install python3-virtualenv virtualenvwrapper
     1093
     1094Salir del modo root y crear el ambiente:
     1095
     1096$ mkvirtualenv --python=/usr/bin/python3 geodjango
     1097\end{verbatim}
     1098\end{frame}
     1099
     1100\begin{frame}[fragile]
     1101\begin{verbatim}
     1102Instalar los requerimientos del proyecto
     1103
     1104Para activar el ambiente virtual geodjango ejecute el comando:
     1105
     1106$ workon geodjango
     1107
     1108Quedando activado el entorno virtual de esta manera.
     1109
     1110(geodjango)$
     1111
     1112Crear el archivo requerimientos.txt
     1113vim requerimientos.txt
     1114
     1115*** Inicio del archivo requerimientos.txt
     1116Django==1.11.4
     1117psycopg2==2.7.1
     1118pytz==2017.2
     1119*** fin del archivo requeimientos.txt
     1120
     1121Ejecutar el comando de descarga e instalación
     1122pip install -r requeimientos.txt
     1123\end{verbatim}
     1124\end{frame}
     1125
     1126\begin{frame}[fragile]
     1127\begin{verbatim}
     1128Crear el proyecto geodjango-demo
     1129
     1130django-admin startproject geodjango-demo
     1131
     1132cd geodjango-demo
     1133
     1134Crear base de datos y Migrar los modelos
     1135
     1136Como super usuario instalar postgis:
     1137
     1138aptitude install postgis
     1139
     1140aptitude install postgresql-x.x-postgis-x.x
     1141
     1142Nota: las x.x debe ser sustituidad por la versión de
     1143Postgres instalada
     1144\end{verbatim}
     1145\end{frame}
     1146
     1147\begin{frame}[fragile]
     1148\begin{verbatim}
     1149Ingresar a la consola de postgres con la siguiente orden:
     1150$ psql
     1151
     1152Ejecutar la siguiente sentencia estando en la consola de
     1153postgres:
     1154
     1155postgres=# CREATE DATABASE geodjango OWNER=postgres;
     1156postgres=#  \q
     1157
     1158$ psql geodjango
     1159
     1160geodjango=# CREATE EXTENSION postgis;
     1161geodjango=# \q
     1162
     1163Editar el archivo geodjango-demo/settings.py
     1164
     1165INSTALLED_APPS = [
     1166    ...
     1167    'django.contrib.gis',
     1168]
     1169\end{verbatim}
     1170\end{frame}
     1171
     1172\begin{frame}[fragile]
     1173\begin{verbatim}
     1174Modificar la conexión para la base de datos:
     1175
     1176DATABASES = {
     1177    'default': {
     1178        'ENGINE': 'django.contrib.gis.db.backends.postgis',
     1179        'NAME': 'geodjango',
     1180        'USER': 'administrador',
     1181        'PASSWORD': 'clave',
     1182        'HOST': 'localhost',
     1183        'PORT': '5432',
     1184        'ATOMIC_REQUESTS': True,
     1185        # Crea transacciones en cada peticion de la vista
     1186    }
     1187}
     1188
     1189Para migrar los modelos del proyecto se debe usar
     1190el siguiente comando:
     1191
     1192(geodjango)$ python manage.py makemigrations
     1193(geodjango)$ python manage.py migrate
     1194(geodjango)$ python manage.py createsuperusuer
     1195\end{verbatim}
     1196\end{frame}
     1197
     1198\begin{frame}[fragile]
     1199\begin{verbatim}
     1200Creamos la aplicación geolocation
     1201(geodjango)$ python manage.py startapp geolocation
     1202
     1203Creamos el archivos geolocation/urls.py
     1204# -*- coding: utf-8 -*-
     1205from django.conf.urls import url
     1206from .views import *
     1207urlpatterns = [
     1208                url(r'^register-poly/',
     1209                    RegisterPolyView.as_view(),
     1210                    name="register_poly"),
     1211                url(r'^list-zipcode/',
     1212                    ListZipcodeView.as_view(),
     1213                    name="list_zipcode"),
     1214                url(r'^delete-zipcode/(?P<pk>\d+)/',
     1215                    ZipcodeDeleteView.as_view(),
     1216                    name="delete_zipcode"),
     1217                url(r'update-zipcode/(?P<pk>\d+)/$',
     1218                    ZipCodeUpdate.as_view(),
     1219                    name='update_zipcode')
     1220              ]
     1221\end{verbatim}
     1222\end{frame}
     1223
     1224\begin{frame}[fragile]
     1225\begin{verbatim}
     1226Modificar el archivo geolocation/views.py
     1227
     1228# -*- coding: utf-8 -*-
     1229from django.contrib import messages
     1230from django.contrib.messages.views import SuccessMessageMixin
     1231from django.urls import reverse_lazy
     1232from django.views.generic.edit import (
     1233    FormView, DeleteView, UpdateView
     1234    )
     1235from django.views.generic import ListView
     1236
     1237from .forms import *
     1238from .models import *
     1239
     1240\end{verbatim}
     1241\end{frame}
     1242
     1243\begin{frame}[fragile]
     1244\begin{verbatim}
     1245class RegisterPolyView(FormView):
     1246    form_class = ZipcodeForms
     1247    template_name = 'geodjango-template.html'
     1248    success_url = '/geolocation/register-poly/'
     1249    def form_valid(self, form, **kwargs):
     1250        new_zipcode = form.save()
     1251        messages.success(self.request,
     1252        "ZipCode %s, registrado con exito" % (str(new_zipcode)))
     1253        return super(RegisterPolyView, self).form_valid(form)
     1254class ListZipcodeView(ListView):
     1255    model = Zipcode
     1256    template_name = 'geodjango-list.html'
     1257    paginate_by = 3
     1258class ZipcodeDeleteView(DeleteView):
     1259    model = Zipcode
     1260    success_url = reverse_lazy('geolocation:list_zipcode')
     1261class ZipCodeUpdate(UpdateView, SuccessMessageMixin):
     1262    model = Zipcode
     1263    form_class = ZipcodeForms
     1264    success_message = 'ZipCode Actualizado con exito'
     1265    success_url = reverse_lazy('geolocation:list_zipcode')
     1266\end{verbatim}
     1267\end{frame}
     1268
     1269\begin{frame}[fragile]
     1270\begin{verbatim}
     1271Editar el archivo admin.py
     1272# -*- coding: utf-8 -*-
     1273from django.contrib.gis import admin
     1274from .models import *
     1275admin.site.register(Zipcode, admin.OSMGeoAdmin)
     1276
     1277Editar el archivo apps.py
     1278from django.apps import AppConfig
     1279class GeolocationConfig(AppConfig):
     1280    name = 'geolocation'
     1281
     1282Editar el archivo forms.py
     1283# -*- coding: utf-8 -*-
     1284from django.contrib.gis import forms
     1285from .models import *
     1286
     1287class ZipcodeForms(forms.ModelForm):
     1288    class Meta:
     1289        model = Zipcode
     1290        fields = '__all__'
     1291\end{verbatim}
     1292\end{frame}
     1293
     1294\begin{frame}[fragile]
     1295\begin{verbatim}
     1296    def __init__(self, *args, **kwargs):
     1297        super(ZipcodeForms, self).__init__(*args, **kwargs)
     1298        self.fields['code'].widget.attrs.update(
     1299           {'class': 'form-control','placeholder': 'Zip Code'})
     1300        self.fields['code'].label = 'Zip Code'
     1301        self.fields['code'].required = True
     1302
     1303        # Se le agrega la ruta donde se construye el mapa
     1304        # con el default_zoom
     1305        self.fields['poly'].widget =
     1306         forms.OSMWidget.template_name = 'openlayers-cust.html'
     1307
     1308        # Se le agrega al campo los atributos que por defecto
     1309        # tiene la ubicacion (lat lon) de Venezuela
     1310        # Con un zoom por defecto de 5.2 y
     1311        # Un alto y ancho de 600X400
     1312        self.fields['poly'].widget = forms.OSMWidget(attrs={
     1313                         'default_zoom': 5.2, 'map_width': 600,
     1314                         'map_height': 400, 'default_lat': 8,
     1315                         'default_lon': -66})
     1316        self.fields['poly'].label = 'Cordenadas Poligonales'
     1317        self.fields['poly'].required = True
     1318\end{verbatim}
     1319\end{frame}
     1320
     1321\begin{frame}[fragile]
     1322\begin{verbatim}
     1323Editar el archivo models.py
     1324# -*- coding: utf-8 -*-
     1325from django.contrib.gis.db import models
     1326
     1327class Zipcode(models.Model):
     1328    code = models.CharField(max_length=5) #Campo del ZipCode
     1329    poly = models.PolygonField() #Campo de la poligonal
     1330    class Meta:
     1331        ordering = ('code',)
     1332        verbose_name = 'Zipcode'
     1333        verbose_name_plural = 'Zipcodes'
     1334    def __str__(self):
     1335        return self.code
     1336class Elevation(models.Model):
     1337    name = models.CharField(max_length=100)
     1338    rast = models.RasterField()
     1339    class Meta:
     1340        ordering = ('name',)
     1341        verbose_name = 'Elevation'
     1342        verbose_name_plural = 'Elevations'
     1343    def __str__(self):
     1344        return self.name
     1345\end{verbatim}
     1346\end{frame}
     1347
     1348\begin{frame}[fragile]
     1349\begin{verbatim}
     1350Editar el archivo geodjango-demo/settings.py
     1351
     1352INSTALLED_APPS = [
     1353    ...
     1354    'django.contrib.gis',
     1355    'geolocation',
     1356]
     1357
     1358Guardamos y ejecutamos el comando
     1359(geodjango)$ python manage.py makemigrations geolocation
     1360(geodjango)$ python manage.py migrate geolocation
     1361
     1362Editamos el Templates para lo cual creamos la carpeta templates
     1363y creamos los archivos geodjango-template.html y
     1364geodjango-list.html
     1365
     1366mkdir geolocation/templates
     1367cd geolocation/templates
     1368
     1369\end{verbatim}
     1370\end{frame}
     1371
     1372\begin{frame}[fragile]
     1373\begin{verbatim}
     1374Archivo geodjango-list.html
     1375{% extends "admin/base.html" %}
     1376{% block title %}Listar Zipcode {% endblock title %}
     1377{% block branding %}
     1378    <h1 id="site-name"><a href="{% url 'admin:index' %}">
     1379    Demo-GeoDjango</a></h1>
     1380{% endblock %}
     1381{% block breadcrumbs %}
     1382    <div class="breadcrumbs">
     1383    <a href="{% url 'geolocation:register_poly' %}">
     1384    Registrar ZipCode</a>/
     1385    <a href="{% url 'geolocation:list_zipcode' %}">
     1386    Listar ZipCode</a>
     1387    {% if title %} &rsaquo; {{ title }}{% endif %}
     1388    </div>
     1389{% endblock breadcrumbs%}
     1390{% block content %}
     1391    <h1>Zip Codes</h1>
     1392    <table><thead><tr><th>ZipCodes</th>
     1393                      <th>Coordenadas</th>
     1394                      <th>Acciones</th></tr></thead>
     1395\end{verbatim}
     1396\end{frame}
     1397
     1398\begin{frame}[fragile]
     1399\begin{verbatim}
     1400    {% for zips in object_list %}
     1401        <tbody><tr>
     1402         <td>{{ zips.code }}</td>
     1403         <td>{{ zips.poly }}</td>
     1404         <td><a title="Editar" class="changelink"
     1405          href="{% url 'geolocation:update_zipcode' zips.pk %}">
     1406          </a>
     1407         <a title="Eliminar" class="deletelink"
     1408          href="{% url 'geolocation:delete_zipcode' zips.pk %}">
     1409          </a>
     1410         </td></tr></tbody>
     1411    {% empty %}
     1412        <tbody>
     1413            <tr><td>No hay zipcode.</td></tr>
     1414        </tbody>
     1415    {% endfor %}
     1416 
     1417    </table>
     1418\end{verbatim}
     1419\end{frame}
     1420
     1421\begin{frame}[fragile]
     1422\begin{verbatim}
     1423
     1424    {% if is_paginated %}
     1425        <div class="pagination">
     1426            <span class="page-links">
     1427                {% if page_obj.has_previous %}
     1428<a href="/geolocation/list-zipcode/?page=
     1429{{ page_obj.previous_page_number }}">Anterior</a>
     1430                {% endif %}
     1431                <span class="page-current">
     1432Página {{ page_obj.number }}de{{ page_obj.paginator.num_pages }}
     1433                </span>
     1434                {% if page_obj.has_next %}
     1435<a href="/geolocation/list-zipcode/?page=
     1436{{ page_obj.next_page_number }}">Siguiente</a>
     1437                {% endif %}
     1438          </span>
     1439        </div>
     1440    {% endif %}
     1441{% endblock content %}
     1442""" Fin del archivo geodjango-list.html
     1443\end{verbatim}
     1444\end{frame}
     1445
     1446\begin{frame}[fragile]
     1447\begin{verbatim}
     1448""" Archivo geodjango-templates.html
     1449{% extends "admin/base.html" %}
     1450{% block title %}Registrar Zipcode {% endblock title %}
     1451{% block extrastyle %}{{ form.media }}{% endblock extrastyle %}
     1452{% block branding %}  <h1 id="site-name">
     1453<a href="{% url 'admin:index' %}">Demo-GeoDjango</a></h1>
     1454{% endblock branding %}
     1455{% block breadcrumbs %}
     1456    <div class="breadcrumbs">
     1457    <a href="{% url 'geolocation:register_poly' %}">
     1458    Registrar ZipCode</a>
     1459    <a href="{% url 'geolocation:list_zipcode' %}">
     1460    Listar ZipCode</a>
     1461    {% if title %} &rsaquo; {{ title }}{% endif %} </div>
     1462{% endblock breadcrumbs%}
     1463{% block content %}
     1464    <form method="post">{% csrf_token %}
     1465        <div class="form-row">{{ form.as_p }}</div>
     1466        <div class="submit-row">
     1467         <input type="submit" value="Agregar ZipCode" />
     1468        </div></form>
     1469{% endblock content %}
     1470\end{verbatim}
     1471\end{frame}
     1472
     1473\begin{frame}[fragile]
     1474\begin{verbatim}
     1475""" Archivo openlayers-cust.html
     1476
     1477{% extends "gis/openlayers.html" %}
     1478{% load l10n %}
     1479
     1480{% block options %}{{ block.super }}
     1481options['default_lon'] = {{ default_lon|unlocalize }};
     1482options['default_lat'] = {{ default_lat|unlocalize }};
     1483options['default_zoom'] = {{ default_zoom|unlocalize }};
     1484{% endblock %}
     1485
     1486{% block base_layer %}
     1487var base_layer = new ol.layer.Tile({source:
     1488                                    new ol.source.OSM()});
     1489{% endblock %}
     1490
     1491\end{verbatim}
     1492\end{frame}
     1493
     1494\begin{frame}[fragile]
     1495\begin{verbatim}
     1496
     1497{% block content %}
     1498    <form method="post">
     1499    {% csrf_token %}
     1500        <div class="form-row">
     1501            {{ form.as_p }}
     1502        </div>
     1503        <div class="submit-row">
     1504<label>&nbsp;</label>
     1505<input type="submit" value="Agregar ZipCode" />
     1506        </div>
     1507    </form>
     1508{% endblock content %}
     1509
     1510""" Fin del archivo geodjango-templates.html
     1511
     1512\end{verbatim}
     1513\end{frame}
     1514
     1515\begin{frame}[fragile]
     1516\begin{verbatim}
     1517Editar el archivo geodjango-demo/urls.py
     1518
     1519from django.conf.urls import url, include
     1520from django.contrib.gis import admin
     1521
     1522urlpatterns = [
     1523    url(r'^admin/', admin.site.urls),
     1524    url(r'^geolocation/', include('geolocation.urls',
     1525    namespace="geolocation")),
     1526]
     1527
     1528Guardar y ahora se puede ejecutar el comando
     1529
     1530(geodjango)$ python manage.py runserver
     1531
     1532Y acceder desde un navegador la dirección
     1533
     1534http://localhost:8000/geolocation/register-poly/
     1535
     1536\end{verbatim}
     1537\end{frame}
     1538
     1539
    10781540\begin{frame}[plain]
    10791541
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.