Transcript
  • 1/7/2015 Django|Djangodeunvistazo

    http://django.es/docs/intro/general/ 1/5

    Djangoeselentornodedesarrollowebparaperfeccionistasconlmitesdetiempo

    Inicio Blog Documentacin Descarga Comunidad Libros Empleos Formacin

    Django de un vistazoDebido a que Django fue desarrollado en un ambiente gil de redaccin, se dise para que las tareascomunesdedesarrollowebfueranrpidasysimples.Loquesigueesunvistazoalaformadecodificarunaaplicacinwebconbasededatos(databasedrivenWebapp)usandoDjango.

    El objetivo de este documento es dar suficiente informacin tcnica para entender cmo funciona Django,pero no pretende ser un tutorial o referencia aunque tenemos ambas cosas! Cuando ests listo paraempezarunproyectoconDjangopuedesleereltutorialoirdirectamentealadocumentacinmsdetallada.

    Disea tu modeloAunqueesposibleusarDjangosinunabasededatos,DjangoincluyeunmapeadorobjetorelacionalenelqueesposibledescribirlaestructuradelabasededatosusandoPython.

    Lasintaxisdelmodelodedatosofrecemuchas formasderepresentar losmodeloshastaahorahaestadoresolviendoproblemasconbasesdedatospormsdedosaos.Aquhayunejemplorpido:

    classReporter(models.Model):full_name=models.CharField(maxlength=70)

    def__unicode__(self):returnself.full_name

    classArticle(models.Model):pub_date=models.DateTimeField()headline=models.CharField(maxlength=200)article=models.TextField()reporter=models.ForeignKey(Reporter)

    def__unicode__(self):returnself.headline

    InstlaloCon elmodelo listo, ejecuta la utilidad de lnea de comandos para crear automticamente las tablas de labasededatos:

    manage.pysyncdb

    Elcomandosyncdb revisa todos losmodelosdisponibles y crea las tablas correspondientesen labasededatossinoexistanpreviamente.

    Disfruta la APIConesohemosconseguido,sinmayoresfuerzo,unaexpresivaAPIparaaccederatusdatos.LaAPIsecreaalvuelo,sinnecesidaddegenerarcdigo:

    >>>frommysite.modelsimportReporter,Article

    #Annohayreporterosenelsistema>>>Reporter.objects.all()[]

    #Creamosunnuevoreportero.>>>r=Reporter(full_name='JohnSmith')

    Contenido

    DjangodeunvistazoDiseatumodeloInstlaloDisfrutalaAPIUna interfaz de administracin dinmica:No son slo los andamios, es la casacompletaDiseatusURLsProgramatusvistasDiseatusplantillasEstoesslolasuperficie

  • 1/7/2015 Django|Djangodeunvistazo

    http://django.es/docs/intro/general/ 2/5

    #Grabamoselobjetoenlabasededatos.Debesllamarasave()explcitamente.>>>r.save()

    #AhoratieneunID>>>r.id1

    #Ahorahayunnuevoreporteroenlabasededatos.>>>Reporter.objects.all()[JohnSmith]

    #LoscampossonrepresentadoscomoatributosenunobjetoPython.>>>r.full_name'JohnSmith'

    #DjangoproveeunaricaAPIparabsquedadedatos.>>>Reporter.objects.get(id=1)JohnSmith>>>Reporter.objects.get(full_name__startswith='John')JohnSmith>>>Reporter.objects.get(full_name__contains='mith')JohnSmith>>>Reporter.objects.get(id=2)Traceback(mostrecentcalllast):...DoesNotExist:Reporterdoesnotexistfor{'id__exact':2}

    #Creamosunartculo.>>>fromdatetimeimportdatetime>>>a=Article(pub_date=datetime.now(),headline='Djangoiscool',...article='Yeah.',reporter=r)>>>a.save()

    #Ahoraelartculoestenlabasededatos.>>>Article.objects.all()[Djangoiscool]

    #LosobjetosArticletienenunaAPIparaaccederalosobjetosReporter#relacionados.>>>r=a.reporter>>>r.full_name'JohnSmith'

    #Yviceversa:LosobjetosReportertienenunaAPIparaaccederalos#objetosArticle.>>>r.article_set.all()[Djangoiscool]

    #LaAPIsiguelasrelacioneshastadondeserequiere,ejecutandoJOINs#eficientestrasbambalinas.#Lainstruccinquesigueencuentratodoslosartculosdeunreportero#cuyonombrecomiencecon"John".>>>Article.objects.filter(reporter__full_name__startswith="John")[Djangoiscool]

    #Unobjetosemodificaalterandosusatributosyllamandoasave().>>>r.full_name='BillyGoat'>>>r.save()

    #Unobjetoseeliminacondelete().>>>r.delete()

    Una interfaz de administracin dinmica: No son slo los andamios, esla casa completa

  • 1/7/2015 Django|Djangodeunvistazo

    http://django.es/docs/intro/general/ 3/5

    Una vez que los modelos estn definidos, Django puede crear automticamente una interfaz deadministracin profesional y lista para produccin un sitio web que permite a los usuarios autenticadosagregar,cambiaryeliminarobjetos.Estanfcilcomoregistrartumodeloenelsitiodeadministracin:

    #Enmodels.py...

    fromdjango.dbimportmodels

    classArticle(models.Model):pub_date=models.DateTimeField()headline=models.CharField(maxlength=200)article=models.TextField()reporter=models.ForeignKey(Reporter)classAdmin:pass

    #Enadmin.pyenelmismodirectorio...importmodelsfromdjango.contribimportadmin

    admin.site.register(models.Article)

    La filosofaaquesqueelsitiopuedesermodificadoporpersonaladministrativo,oporuncliente,o talvezpor el mismo desarrollador y no hay que preocuparse de crear interfaces de administracin slo paragestionarcontenido.

    Un flujo de trabajo tpico en la creacin de aplicaciones Django es crear modelos y habilitar el sitio deadministracin tan rpido como sea posible, de forma que el personal (o los clientes) puedan comenzar aintroducirdatos.Luego,desarrollarlaformaenquelosdatossonpresentadosalpblico.

    Disea tus URLsUnesquemadeURLslimpioyeleganteesundetalleimportanteenunaaplicacinwebdealtacalidad.DjangoincentivaeldiseodeURLseleganteynoagreganingnlastrealasURLs,como.phpo.asp.

    Paradisear lasURLsde laaplicacin,secreaunmduloPython llamadoURLconf:escomouna tabladecontenidosparalaaplicacinquecontieneunmapeosimpleentrepatronesdeURLsyfuncionesPython.LasURLconfstambinsirvenparadesacoplarlasURLsdelcdigoPython.

    AsescomounaURLconfluceparaelejemplodemsarriba:

    fromdjango.conf.urls.defaultsimport*

    urlpatterns=patterns('',(r'^/articles/(\d{4})/$','mysite.views.year_archive'),(r'^/articles/(\d{4})/(\d{2})/$','mysite.views.month_archive'),(r'^/articles/(\d{4})/(\d{2})/(\d+)/$','mysite.views.article_detail'),)

    EstecdigoasociaURLs,comosimplesexpresionesregulares,alaubicacindefuncionesPython("vistas").Lasexpresiones regularesusanparntesis para "capturar" valoresde lasURLs.Cuandounusuario solicitauna pgina, Django pasa por cada patrn, en orden, y se detiene en el primero que coincida con la URLsolicitada.(Siningunocoincide,Djangollamaunavistaespecial404).Estoesincreblementerpido,porquelasexpresionesregularessoncompiladascuandosecargaelcdigo.

    Unavezqueunadelasexpresionescoincide,Djangoimportayllamalavistacorrespondiente,lacualesunasimplefuncinPython.Cadavistarecibeunobjetorequestquecontienelametadatadelapeticinylosvalorescapturadosenlaexpresinregular.

    Por ejemplo, si un usuario solicita la URL "/articles/2007/05/39323/", Django llamara a la funcinmysite.views.article_detail(request,'2007','05','39323').

    Programa tus vistasCada vista (view) es responsable de hacer una de dos cosas: Devolver un objeto HttpResponse con elcontenidode lapginasolicitada,o lanzarunaexcepcincomoHttp404. Lodemses responsabilidaddel

  • 1/7/2015 Django|Djangodeunvistazo

    http://django.es/docs/intro/general/ 4/5

    desarrollador.

    Generalmente,unavistarecuperadatosdeacuerdoalosparmetros,cargaunaplantillay larellenaconlosdatosrecuperados.Aquhayunvistadeejemploparaelyear_archivevistoanteriormente:

    defyear_archive(request,year):a_list=Article.objects.filter(pub_date__year=year)returnrender_to_response('news/year_archive.html',{'year':year,'article_list':a_list

    EsteejemplousaelsistemadeplantillasdeDjango,elqueposeevariascaractersticaspoderosasperoeslosuficientementesimpleparapoderserusadopornoprogramadores.

    Disea tus plantillasElcdigoanteriorcargalaplantillanews/year_archive.html.

    Diango tiene una ruta de bsqueda de plantillas, lo que permiteminimizar la redundancia entre ellas.En laconfiguracin deDjango, es posible especificar una lista de directorios donde se buscarn las plantillas.Siunaplantillanoexisteenelprimerdirectorio,sebuscaenelsiguiente,yassucesivamente.

    Supongamosqueseencontrlaplantillanews/article_detail.html.Aquhayunejemplodecmopodraluciresaplantilla:

    {%extends"base.html"%}

    {%blocktitle%}Articulosde{{year}}{%endblock%}

    {%blockcontent%}Articulosde{{year}}

    {%forarticleinarticle_list%}{{article.headline}}Por{{article.reporter.full_name}}Publicado{{article.pub_date|date:"Fj,Y"}}{%endfor%}{%endblock%}

    Lasvariablesestnencerradasporllavesdobles.{{article.headline}}significa"Desplegarelvalordelatributoheadlinedearticle".Perolospuntosnoslosonusadosparabsquedadeatributos:Tambinpuedenservirparabsquedasdeclavesendiccionarios,bsquedadendicesyllamadasafunciones.

    Notemosque{{article.pub_date|date:"Fj,Y"}}usaun"pipe"Unix(elcaracter"|").Estosellamaunfiltrodeplantilla,yesunaformadefiltrarelvalordeunavariable.Enestecaso,elfiltrodatedaformatoaunobjetodatetimedePython(talcomoocurreenlafuncindatedePHPs,existeunaideabuenaenPHP).

    Es posible encadenar tantos filtros como se desee. Adems se pueden codificar filtros a lamedida.De lamismaforma,esposiblecodificaretiquetas(tags)deplantillasalamedida,loscualespuedenejecutarcdigoPythontrasbambalinas.

    Finalmente, Django usa el concepto de "herencia de plantillas": Eso es lo que hace {% extends"base.html"%}.Significa"Primerocargalaplantillalamada'base',lacualtienealgunosbloquesdefinidos,yrellnalosconlossiguientesbloques".Enotraspalabras,permitedisminuirdramticamentelaredundanciaenlasplantillas:Cadaplantillatienequedefinirsloloqueleespropio.

    Asescomopodralucir"base.html":

    {%blocktitle%}{%endblock%}

    {%blockcontent%}{%endblock%}

  • 1/7/2015 Django|Djangodeunvistazo

    http://django.es/docs/intro/general/ 5/5

    En pocas palabras, define el lookandfeel del sitio (con el logo del sitio), y provee espacios para serrellenadospor lasplantillashijas.Estopermitequeel rediseodeun sitio tan fcil comocambiar unnicoarchivolaplantillabase.

    Ademspermitecrearmltiplesversionesdeunsitio, condiferentesplantillasbase, reusando lasplantillashijas. Los creadores de Django han usado esta tcnica para crear ediciones para dispositivos mvilesnotablementedistintasdealgunossitiossimplementecreandounanuevaplantillabase.

    Recuerda que no es necesario usar el sistema de plantillas de Django si es que prefieres otro sistema.Aunque el sistema de plantillas de Django est particularmente bien integrado con la capa de modelo deDjango,noesobligatoriousarlo.Porlamismarazn,tampocoesnecesariousarlaAPIdebasededatosdeDjango. Es posible utilizar otra capa de abstraccin de datos, es posible leer archivos XML, leer archivosdesdeeldisco,oloquesequiera.CadapiezadeDjangomodelos,vistas,plantillasestdesacopladadelresto.

    Esto es slo la superficieEstahasidoslounavistarpidaalafuncionalidaddeDjango.Otrascaractersticastilesson:

    Unframeworkdecachqueseintegraconmemcachedyotrossistemassimilares.Un frameworkdesindicacinquepermite crear feedsRSSyAtomdemanera tan fcil comocrearpequeasclasesPython.Interfacesdeadministracingeneradasautomticamentemssexysestaintroduccinslotocalasuperficiedeltema.

    Los siguientespasosobvios sondescargarDjango, leer el tutorial y unirte a lacomunidad. Gracias por tuinters!

    Django.esesunpuntodeencuentroparaentusiastasdeDjango.DjangoesunamarcaregistradadeDjangoSoftwareFoundation.DesarrolloyhostingporZenxITyCmaradeComercioIberoRusa