Conjunto fd1bfc1 en sapic
- Fecha y hora:
- 30/10/2017 15:03:54 (hace 7 años)
- Branches:
- master, erwin, explicacion_situacional
- Children:
- f837b9d
- Parents:
- e11d965
- Fichero:
-
- 1 editado
Leyenda
- No modificado
- Añadido
- Eliminado
-
curso_django/curso_django.tex
re11d965 rfd1bfc1 1076 1076 \end{frame} 1077 1077 1078 \subsection{Geodjango} 1079 \begin{frame}[fragile] 1080 \begin{verbatim} 1081 Para la gestión de datos geolocalizados debe utilizar 1082 una extensión de django denominada Geodjango 1083 1084 Instalación de componentes para la gestión de mapas 1085 en particular la extensión django.contrib.gis 1086 1087 Entrar como root para la instalacion 1088 1089 aptitude install python3.4 python3-pip python3.4-dev 1090 python3-setuptools 1091 1092 aptitude install python3-virtualenv virtualenvwrapper 1093 1094 Salir 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} 1102 Instalar los requerimientos del proyecto 1103 1104 Para activar el ambiente virtual geodjango ejecute el comando: 1105 1106 $ workon geodjango 1107 1108 Quedando activado el entorno virtual de esta manera. 1109 1110 (geodjango)$ 1111 1112 Crear el archivo requerimientos.txt 1113 vim requerimientos.txt 1114 1115 *** Inicio del archivo requerimientos.txt 1116 Django==1.11.4 1117 psycopg2==2.7.1 1118 pytz==2017.2 1119 *** fin del archivo requeimientos.txt 1120 1121 Ejecutar el comando de descarga e instalación 1122 pip install -r requeimientos.txt 1123 \end{verbatim} 1124 \end{frame} 1125 1126 \begin{frame}[fragile] 1127 \begin{verbatim} 1128 Crear el proyecto geodjango-demo 1129 1130 django-admin startproject geodjango-demo 1131 1132 cd geodjango-demo 1133 1134 Crear base de datos y Migrar los modelos 1135 1136 Como super usuario instalar postgis: 1137 1138 aptitude install postgis 1139 1140 aptitude install postgresql-x.x-postgis-x.x 1141 1142 Nota: las x.x debe ser sustituidad por la versión de 1143 Postgres instalada 1144 \end{verbatim} 1145 \end{frame} 1146 1147 \begin{frame}[fragile] 1148 \begin{verbatim} 1149 Ingresar a la consola de postgres con la siguiente orden: 1150 $ psql 1151 1152 Ejecutar la siguiente sentencia estando en la consola de 1153 postgres: 1154 1155 postgres=# CREATE DATABASE geodjango OWNER=postgres; 1156 postgres=# \q 1157 1158 $ psql geodjango 1159 1160 geodjango=# CREATE EXTENSION postgis; 1161 geodjango=# \q 1162 1163 Editar el archivo geodjango-demo/settings.py 1164 1165 INSTALLED_APPS = [ 1166 ... 1167 'django.contrib.gis', 1168 ] 1169 \end{verbatim} 1170 \end{frame} 1171 1172 \begin{frame}[fragile] 1173 \begin{verbatim} 1174 Modificar la conexión para la base de datos: 1175 1176 DATABASES = { 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 1189 Para migrar los modelos del proyecto se debe usar 1190 el 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} 1200 Creamos la aplicación geolocation 1201 (geodjango)$ python manage.py startapp geolocation 1202 1203 Creamos el archivos geolocation/urls.py 1204 # -*- coding: utf-8 -*- 1205 from django.conf.urls import url 1206 from .views import * 1207 urlpatterns = [ 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} 1226 Modificar el archivo geolocation/views.py 1227 1228 # -*- coding: utf-8 -*- 1229 from django.contrib import messages 1230 from django.contrib.messages.views import SuccessMessageMixin 1231 from django.urls import reverse_lazy 1232 from django.views.generic.edit import ( 1233 FormView, DeleteView, UpdateView 1234 ) 1235 from django.views.generic import ListView 1236 1237 from .forms import * 1238 from .models import * 1239 1240 \end{verbatim} 1241 \end{frame} 1242 1243 \begin{frame}[fragile] 1244 \begin{verbatim} 1245 class 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) 1254 class ListZipcodeView(ListView): 1255 model = Zipcode 1256 template_name = 'geodjango-list.html' 1257 paginate_by = 3 1258 class ZipcodeDeleteView(DeleteView): 1259 model = Zipcode 1260 success_url = reverse_lazy('geolocation:list_zipcode') 1261 class 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} 1271 Editar el archivo admin.py 1272 # -*- coding: utf-8 -*- 1273 from django.contrib.gis import admin 1274 from .models import * 1275 admin.site.register(Zipcode, admin.OSMGeoAdmin) 1276 1277 Editar el archivo apps.py 1278 from django.apps import AppConfig 1279 class GeolocationConfig(AppConfig): 1280 name = 'geolocation' 1281 1282 Editar el archivo forms.py 1283 # -*- coding: utf-8 -*- 1284 from django.contrib.gis import forms 1285 from .models import * 1286 1287 class 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} 1323 Editar el archivo models.py 1324 # -*- coding: utf-8 -*- 1325 from django.contrib.gis.db import models 1326 1327 class 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 1336 class 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} 1350 Editar el archivo geodjango-demo/settings.py 1351 1352 INSTALLED_APPS = [ 1353 ... 1354 'django.contrib.gis', 1355 'geolocation', 1356 ] 1357 1358 Guardamos y ejecutamos el comando 1359 (geodjango)$ python manage.py makemigrations geolocation 1360 (geodjango)$ python manage.py migrate geolocation 1361 1362 Editamos el Templates para lo cual creamos la carpeta templates 1363 y creamos los archivos geodjango-template.html y 1364 geodjango-list.html 1365 1366 mkdir geolocation/templates 1367 cd geolocation/templates 1368 1369 \end{verbatim} 1370 \end{frame} 1371 1372 \begin{frame}[fragile] 1373 \begin{verbatim} 1374 Archivo 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 %} › {{ 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"> 1432 Pá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 %} › {{ 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 }} 1481 options['default_lon'] = {{ default_lon|unlocalize }}; 1482 options['default_lat'] = {{ default_lat|unlocalize }}; 1483 options['default_zoom'] = {{ default_zoom|unlocalize }}; 1484 {% endblock %} 1485 1486 {% block base_layer %} 1487 var 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> </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} 1517 Editar el archivo geodjango-demo/urls.py 1518 1519 from django.conf.urls import url, include 1520 from django.contrib.gis import admin 1521 1522 urlpatterns = [ 1523 url(r'^admin/', admin.site.urls), 1524 url(r'^geolocation/', include('geolocation.urls', 1525 namespace="geolocation")), 1526 ] 1527 1528 Guardar y ahora se puede ejecutar el comando 1529 1530 (geodjango)$ python manage.py runserver 1531 1532 Y acceder desde un navegador la dirección 1533 1534 http://localhost:8000/geolocation/register-poly/ 1535 1536 \end{verbatim} 1537 \end{frame} 1538 1539 1078 1540 \begin{frame}[plain] 1079 1541
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.