Django _ Django de Un Vistazo

  • View
    214

  • Download
    0

Embed Size (px)

DESCRIPTION

introduccin a django

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 lasplantil