Code

Changes between Version 1 and Version 2 of DocPtTutorial3


Ignore:
Timestamp:
11/07/06 17:13:21 (7 years ago)
Author:
marvinware2005@…
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DocPtTutorial3

    v1 v2  
    6464    (regular expression, Python callback function [, optional dictionary]) 
    6565 
     66Django começa a procura na primeira expressão e continua pela lista, comarpando a URL requisitada com cada expressão até que encontre uma coincida. 
    6667 
     68Quando é encontrada tal expressão, Django executa a função de callback com um objeto ``HTTPRequest`` como primeiro argumento, e qualquer valor “capturado” da expressão regular como argumentos chave, e opcionalmente, qualquer argumento do dicionário opcional (o terceiro item da tupla). 
     69 
     70Para mais detalhe sobre objetos ``HTTPRequest``, veja `request and response documentation`_. 
     71Para mais detalhes sobre URLconfs, veja `URLconf documentation`_. 
     72 
     73Quando você executou ``python manage.py startproject mysite`` no começo do Tutorial 1, foi criado um URLconf padrão, em ``mysite/urls.py``. Além disso, foi automaticamente setado sua configuração ``ROOT_URLCONF`` para apontar para esse arquivo:: 
     74 
     75    ROOT_URLCONF = 'mysite.urls' 
     76 
     77É hora de um exemplo. Edite ``mysite/urls.py`` para que fique da seguinte forma:: 
     78 
     79    from django.conf.urls.defaults import * 
     80 
     81    urlpatterns = patterns('', 
     82        (r'^polls/$', 'mysite.polls.views.index'), 
     83        (r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail'), 
     84        (r'^polls/(?P<poll_id>\d+)/results/$', 'mysite.polls.views.results'), 
     85        (r'^polls/(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'), 
     86    ) 
     87 
     88Uma pequena revisão. Quando alguém requisita uma página do se site – diga-se “/polls/23/”, Django vai carregar esse módulo Python, porque ele está apontado pela configuração ``ROOT_URLCONF``. Então, é encontrado uma variável chamada ``urlpatterns`` e realiza uma busca pela expressão regular. Quando é encontrada tal expressão regular - ``r'^polls/(?P<poll_id>\d+)/$'`` - é então carregado o pacote/modulo Python associado: ``mysite.polls.views.detail``. Isso corresponde à função ``detail()`` em ``mysite/polls/views.py``. Finalmente, é chamda a função ``detail()`` da seguinte forma:: 
     89 
     90    detail(request=<HttpRequest object>, poll_id='23') 
     91 
     92A parte ``poll_id='23'`` vem de ``(?P<poll_id>\d+)``. Usando parentes em volta de um padrão “captura” o texto correspondente por aquele padrao e envia esse texto como argumento para a função da view; o ``?P<poll_id>`` define o nome que será usado para identificar o padrão; e ``\d+`` é uma expressão regular que indica uma seqüência de dígitos (ou seja, um número). 
     93 
     94Como os padrões de URL são expressões regulares, não há um limite no que você pode fazer com eles. E não há a necessidade de adicionar “URL cruft” como `.php`` - ao menos que você tenha um “belo” senso de humor, e queira fazer algo como:: 
     95 
     96    (r'^polls/latest\.php$', 'mysite.polls.views.index'), 
     97 
     98Mas não o faça. É horrível. 
     99 
     100Note que essas expressões regulares não procuram por parâmetros GET e POST, ou pelo domínio do site. Por exemplo, em uma requisição para ``http://www.example.com/myapp/``, o URLconf irá, procurar por ``/myapp/``. Em uma requisição para ``http://www.example.com/myapp/?page=3``, o URLconf irá procurar por ``/myapp/``. 
     101 
     102.. _request and response documentation: http://www.djangoproject.com/documentation/request_response/ 
     103.. _URLconf documentation: http://www.djangoproject.com/documentation/url_dispatch/ 
    67104 
    68105}}}