Foros del Web » Programando para Internet » Python »

django urls por base de datos

Estas en el tema de django urls por base de datos en el foro de Python en Foros del Web. hola alguno ha intentado hacer urls en django por base de datos una especie de dinamic routing...
  #1 (permalink)  
Antiguo 17/12/2012, 18:03
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 13 años
Puntos: 18
django urls por base de datos

hola alguno ha intentado hacer urls en django por base de datos una especie de dinamic routing
  #2 (permalink)  
Antiguo 18/12/2012, 14:38
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: django urls por base de datos

¿Podrías poner algo mas detallado de lo quieres hacer?

Por ejemplo:
¿Que quieres hacer?
¿Que estas haciendo?
¿Que resultado estas obteniendo?
¿Que esperas obtener como resultado?
  #3 (permalink)  
Antiguo 18/12/2012, 20:17
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 13 años
Puntos: 18
Respuesta: django urls por base de datos

he visto por lo menos en rails que puedes programar los modelos y crear una tabla de ruteo pero en ves de ser por archivo que sea por base de datos en otras palabras escribir las urls por base de datos en vez por archivos
  #4 (permalink)  
Antiguo 18/12/2012, 20:18
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 13 años
Puntos: 18
Respuesta: django urls por base de datos

aca un ejemplo de mi urls.py deberia funcionar pero no funciona cuando actualizo la base de datos
Código Python:
Ver original
  1. #encoding:utf-8
  2. from django.conf.urls import patterns, include, url
  3. import os,sys
  4. # Uncomment the next two lines to enable the admin:
  5. from django.conf import settings
  6. from django.contrib import admin
  7. from catalogo.models import Categories,Product
  8. from html.models import Page
  9. sys.dont_write_bytecode = True
  10. def fromRelativePath(*relativeComponents):
  11.     RUTA_PROYECTO = os.path.dirname(os.path.realpath(__file__))
  12.     return os.path.join(RUTA_PROYECTO, *relativeComponents).replace("\\","/")
  13.  
  14. def add_catalog_product_url(urlpatterns):
  15.     for product in Product.get_all_products():
  16.         slug= r'^catalogo/detalle/%s' % product.slug
  17.         item= url(slug, 'catalogo.views.product_detail')
  18.         urlpatterns += patterns('',item)
  19. def add_catalog_categories_url(urlpatterns):
  20.     for category in Categories.get_all_categories():
  21.         slug= r'^catalogo/%s' % category.slug
  22.         item= url(slug, 'catalogo.views.catalog')
  23.         urlpatterns += patterns('',item)
  24.     for category in Categories.list_categories():
  25.         sub_slug= r'^catalogo/%s/%s' % (category.parent.slug,category.slug)
  26.         sub_item= url(sub_slug, 'catalogo.views.sub_catalog')
  27.         urlpatterns += patterns('',sub_item)
  28.  
  29.  
  30. def add_html_page_url(urlpatterns):
  31.     for thepage in Page.get_all_pages():
  32.         slug= r'^%s' % thepage.slug
  33.         item= url(slug, 'html.views.list_the_page',name=thepage.slug)
  34.         urlpatterns += patterns('',item)
  35.  
  36. admin.autodiscover()
  37.  
  38. urlpatterns = patterns('',
  39.     # Examples:
  40.     url(r'^$', 'catalogo.views.home', name='home'),
  41.  
  42.     url(r'^catalogo/search$', 'catalogo.views.catalog_search', name='catalog_search'),
  43.     url(r'^contacto$', 'html.views.contact_form', name='contact_form'),
  44.     url(r'^process/contact$', 'html.views.process_contact', name='process_contact_form'),
  45.     #url(r'^zandalia-larga', 'catalogo.views.home', name='home2'),
  46.     #url(r'^catalogo/(?P<slug>)', 'catalogo.views.catalog', name='catalog'),
  47.     # url(r'^mysite/', include('mysite.foo.urls')),
  48.     # url(r'^lista/$', 'backend.views.lista_groups'),
  49.     (r'^js/(?P<path>.*)$', 'django.views.static.serve', {'document_root':fromRelativePath('../design/static')}),
  50.     (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root':fromRelativePath('../media')}),
  51.     (r'^admins/(?P<path>.*)$', 'django.views.static.serve', {'document_root':fromRelativePath('../design/static/admins'), 'show_indexes': True}),
  52.     # Uncomment the admin/doc line below to enable admin documentation:
  53.     # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
  54.  
  55.     # Uncomment the next line to enable the admin:
  56.     url(r'^admin/', include(admin.site.urls)),
  57.     url("^admin-media/(?P<path>.*)$", "django.views.static.serve", {"document_root": fromRelativePath( "../design/static/admin-media")})
  58. )
  59.  
  60. add_catalog_product_url(urlpatterns)
  61. add_catalog_categories_url(urlpatterns)
  62. add_html_page_url(urlpatterns)
  #5 (permalink)  
Antiguo 18/12/2012, 21:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: django urls por base de datos

Ya veo mas o menos lo que intentas hacer.

Lo que quieres hacer es que tu aplicación sea Restful.

Para eso puedes usar 2 librerías:
Django Rest Framework
o
Django Piston

Si prefieres hacerlo por ti mismo.

Básicamente lo que haces es esto:
Código Python:
Ver original
  1. # urls.py
  2. urlpatterns = patterns('',
  3.     url(r'^MyModel/$', ADE_view),
  4.     url(r'^MyModel/(?P<pk>[^/]+)/$', S_view),
  5. )

Código Python:
Ver original
  1. # views.py
  2. def ADE_view(request):
  3.     #Add, Delete or Edit View
  4.     if request.method == 'PUT':
  5.         # Add..
  6.     elif request.method == 'DELETE':
  7.         # Delete
  8.     elif request.method == 'POST':
  9.         # Edit
  10.     else:
  11.         # 404
  12.  
  13. def S_view(request, pk=None):
  14.     # Show view
  15.     if request.method == 'GET:
  16.        obj = get_object_or_404(MyModel, pk)
  17.        # Do some stuff
  18.    else:
  19.        # 404

Ahora el punto clave de esto es no tener, este par de vista por cada modelo en tu app. Y aquí es donde las librerías de arriba te pueden ayudar.
  #6 (permalink)  
Antiguo 18/12/2012, 22:32
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 13 años
Puntos: 18
Respuesta: django urls por base de datos

Código Python:
Ver original
  1. def add_catalog_product_url(urlpatterns):
  2.     for product in Product.get_all_products():
  3.         slug= r'^catalogo/detalle/%s' % product.slug
  4.         item= url(slug, 'catalogo.views.product_detail')
  5.         urlpatterns += patterns('',item)

ves esta parte quiero construir las urls de esta forma pero cada vez que actualizo un registro tengo que restear el apache
  #7 (permalink)  
Antiguo 18/12/2012, 23:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: django urls por base de datos

Ok, voy a tener que ser un poco duro aquí.

Mira, lo que estas haciendo lo estas haciendo terriblemente mal!

1.- Estas haciendo un query en las URLs
2.- Por cada producto estas haciendo una URL estatica! cuando lo correcto seria hacer una URL dinámica.
3.- Obviamente que esto se hace una sola vez por que el urlpatters solamente se crea una vez.

Te recomiendo varias cosas:
1.- Leer sobre django. Ya sea el django-book o la guía de maestros del web.
2.- Leer sobre python y expresiones regulares.
3.- Python != Ruby, incluso dentro de Ruby no harías algo como lo que acabas de postear.

La manera correcta de hacer esto seria mas o menos la siguiente:
Código Python:
Ver original
  1. urlpatterns = patterns('',
  2.     url(r'^$', 'catalogo.views.home', name='home'),
  3.     url(r'^catalogo/detalle/(?P<slug>[^/]+)/$', tu_vista_aqui),
  4. # ...
  5. )

Código Python:
Ver original
  1. def tu_vista_aqui(response, slug=None):
  2.     obj = get_object_or_404(MyModel, slug=slug)
  3.     return render_to_response(template, ...)

Mira incluso veo en tu URLConf que tienes lo siguiente:
Código Python:
Ver original
  1. #url(r'^catalogo/(?P<slug>)', 'catalogo.views.catalog', name='catalog'),

Obviamente esa expresion no va a funcionar. Necesitas capturar algo en la expresión regular.
Código Python:
Ver original
  1. url(r'^catalogo/(?P<slug>[^/]+/$)', 'catalogo.views.catalog', name='catalog'),

Última edición por razpeitia; 19/12/2012 a las 12:18
  #8 (permalink)  
Antiguo 18/12/2012, 23:35
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 13 años
Puntos: 18
Respuesta: django urls por base de datos

ok muchas gracias

Etiquetas: django, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:15.