.. .. META INFORMATION OF TRANSLATION .. .. $TranslationStatus: Done, waiting for revision $ .. $OriginalRevision: 11348 $ .. $TranslationAuthors: Robson Mendonça $ .. .. INFO OF THIS FILE (DO NOT EDIT! UPDATED BY SUBVERSION) .. .. $HeadURL$ .. $LastChangedRevision$ .. $LastChangedBy$ .. $LastChangedDate$ .. .. _ref-request-response: ================================ Objetos de requisição e resposta ================================ .. module:: django.http :synopsis: Classes para trabalhar com requisições e respostas HTTP. Visão Geral =========== O Django utiliza objetos de requisição e resposta para passar estado através do sistema. Quando uma página é requisitada, o Django cria um objeto :class:`HttpRequest` que contém metadados sobre a requisição. Então o Django carrega a view apropriada, passando o :class:`HttpRequest` como o primeiro argumento para a função de view. Cada view é responsável por devolver um objeto :class:`HttpResponse`. Este documento explica as APIs para os objetos :class:`HttpRequest` e :class:`HttpResponse`. Objetos HttpRequest =================== .. class:: HttpRequest Atributos --------- Todos os atributos, exceto ``session``, devem ser considerados somente para leitura. .. attribute:: HttpRequest.path Uma string representando o caminho completo para a página requisitada, não incluindo o domínio. Exemplo: ``"/music/bands/the_beatles/"`` .. attribute:: HttpRequest.method Uma string representando o método HTTP usado na requisição. Este valor está sempre em maiúsculo. Exemplo:: if request.method == 'GET': do_something() elif request.method == 'POST': do_something_else() .. attribute:: HttpRequest.encoding .. versionadded:: 1.0 Uma string representando o valor atual de codificação utilizado para decodificar o envio de dados de formulário (ou ``None``, que quer dizer que o parâmetro de configuração ``DEFAULT_CHARSET`` é utilizado). Você pode alterar este atributo para modificar a codificação usada quando acessar os dados do formulário. Quaisquer acessos subseqüentes a atributos (como ler de ``GET`` ou ``POST``) utilizará no novo valor de encodig. Isto é útil se você sabe que os dados do formulário não estão na codificação ``DEFAULT_CHARSET``. .. attribute:: HttpRequest.GET Um objeto, tipo dicionário, contendo todos os parâmetros HTTP GET. Veja a documentação do ``QueryDict`` abaixo. .. attribute:: HttpRequest.POST Um objeto dicionário contendo todos os parametros passados por HTTP POST. Veja a documentação do ``QueryDict`` abaixo. It's possible that a request can come in via POST with an empty ``POST`` dictionary -- if, say, a form is requested via the POST HTTP method but does not include form data. Therefore, you shouldn't use ``if request.POST`` to check for use of the POST method; instead, use ``if request.method == "POST"`` (see above). É possível que um requisição POST possa vir com um dicionário POST vazio -- se, digo, um formulário é requisitado via metodo HTTP POST mas não inclui dados. Portanto, você não deve usar ``if request.POST`` para checar o uso do método POST; ao invés, use ``if request.method == "POST"`` (veja acima). Perceba: ``POST`` *não* inclui informações de upload de arquivos. Veja ``FILES``. .. attribute:: HttpRequest.REQUEST Por conveniência, um objeto dicionário que procura ``POST`` primeiro, somente depois ``GET``. Inpirado no ``$_REQUEST`` do PHP. Por exemplo, se ``GET = {"name": "john"}`` and ``POST = {"age": '34'}``, ``REQUEST["name"]`` poderia ser ``"john"``, e ``REQUEST["age"]`` poderia ser ``"34"``. É fortemente sugerido que você use o ``GET`` e ``POST`` ao invés de ``REQUEST``, porque são mais explicitos. .. attribute:: HttpRequest.COOKIES Um dicionário padrão do Python contendo todos os cookies. Chaves e valores são strings. .. attribute:: HttpRequest.FILES Um objeto dicionário contendo todos os arquivos enviados. Cada chave em ``FILES`` é o ``name`` do ````. Cada valor em ``FILES`` é um objeto ``UploadedFile`` contendo os seguintes atributos: * ``read(num_bytes=None)`` -- Lê um número de bytes do arquivo. * ``name`` -- O nome do arquivo enviado. * ``size`` -- O tamanho, em bytes, do arquivo enviado. * ``chunks(chunk_size=None)`` -- Um gerado que fornece pedaços sequenciais de dados. Veja :doc:`/topics/files` para mais informações. Note que ``FILES`` conterá somente dados se o método de requisição for POST e o ``
`` que postou a requisição tenha ``enctype="multipart/form-data"``. De outra forma, ``FILES`` será um dicionário em branco. .. versionchanged:: 1.0 Nas versões anteriores do Django, ``request.FILES`` contendo um simples ``dict`` representando os arquivos enviados. Isto já não é verdade -- os arquivos são representados por objetos ``UploadedFile`` como decrito abaixo. Estes objetos ``UploadedFile`` emulam a interface do velho ``dict``, mas que é depreciada e será removida no próximo lançamento do Djando. .. attribute:: HttpRequest.META Um dicionário padrão do Python contendo todos cabeçalhos disponíveis do HTTP. Os cabeçalhos disponíveis dependem do cliente e do servidor, mas aqui há alguns exemplos: * ``CONTENT_LENGTH`` * ``CONTENT_TYPE`` * ``HTTP_ACCEPT_ENCODING`` * ``HTTP_ACCEPT_LANGUAGE`` * ``HTTP_HOST`` -- O cabeçalho HTTP Host enviado pelo cliente. * ``HTTP_REFERER`` -- A página remetente, se ouver uma. * ``HTTP_USER_AGENT`` -- A string do user-agent do cliente. * ``QUERY_STRING`` -- A query string, como uma string única (não parseada). * ``REMOTE_ADDR`` -- O endereço IP do cliente. * ``REMOTE_HOST`` -- O hostname do cliente. * ``REQUEST_METHOD`` -- Uma string como ``"GET"`` ou ``"POST"``. * ``SERVER_NAME`` -- O hostname do servidor. * ``SERVER_PORT`` -- A porta do servidor. Com a exceção do ``CONTENT_LENGTH`` e ``CONTENT_TYPE``, mostrados acima, qualquer cabeçalho HTTP na requisição é convertido para a chave ``META``, tendo todos os seus caracteres passados para maiúsculo, substituindo os hífens por underscores e adicionando um ``HTTP_`` como prefixo do nome. Então, por exemplo, um cabeçalho chamado ``X-Bender`` seria mapeado para a chave ``META`` como ``HTTP_X_BENDER``. .. attribute:: HttpRequest.user A ``django.contrib.auth.models.User`` object representing the currently logged-in user. If the user isn't currently logged in, ``user`` will be set to an instance of ``django.contrib.auth.models.AnonymousUser``. You can tell them apart with ``is_authenticated()``, like so:: Um objeto ``django.contrib.auth.models.User`` representando o usuário atual logado. Se o usuário não estiver logado, o ``user`` conterá uma instância do ``django.contrib.auth.models.AnonymousUser``. Você pode usar o método ``is_authenticated()``, tipo:: if request.user.is_authenticated(): # Faça algo para usuários logados. else: # Faça algo para usuários anônimos. O ``user`` é somente disponível se sua instalação do Django tem o middleware ``AuthenticationMiddleware`` ativado. Para mais, veja :doc:`/topics/auth`. .. attribute:: HttpRequest.session Um objeto dicionário, onde é possivel ler e escrever dados, que representa a sessão corrente. Ele somente é disponível se sua instalação do Django tiver o suporte a sessão ativado. Veja a :doc:`documentação do session ` para destalhes completos. .. attribute:: HttpRequest.raw_post_data Os dados do HTTP POST puros. Este é usual somente para processamentos avançados. Use ``POST`` no lugar dele. .. attribute:: HttpRequest.urlconf Não definido pelo Django em si, mas será lido se outro código (e.g., uma classe middleware) setá-lo. Quando presente, será usado como o URLconf raiz para a requisição corrent, sobrescrever a configuração ``ROOT_URLCONF``. Veja :ref:`how-django-processes-a-request` para detalhes. Métodos ------- .. method:: HttpRequest.get_host() .. versionadded:: 1.0 Retorna o servidor originador da requisição usando informações dos cabeçalhos ``HTTP_X_FORWARDED_HOST`` e ``HTTP_HOST`` (nesta ordem). Se eles não fornecem um valor, o método usa uma combinação de ``SERVER_NAME`` e ``SERVER_PORT`` como detalhado em `PEP 333`_. .. _PEP 333: http://www.python.org/dev/peps/pep-0333/ Exemplo: ``"127.0.0.1:8000"`` .. method:: HttpRequest.get_full_path() Retorna o ``path``, mais uma query string anexa, se aplicável. Exemplo: ``"/music/bands/the_beatles/?print=true"`` .. method:: HttpRequest.build_absolute_uri(location) .. versionadded:: 1.0 Retorna a URI absoluta de ``location``. Se nenhum location é fornecido, o location será setado para `request.get_full_path()``. Se o location já é uma URI absoluta, ele não será alterado. De outra forma a URI absoluta é construída usando as variáveis de servidor disponíveis nesta requisição. Exemplo: ``"http://example.com/music/bands/the_beatles/?print=true"`` .. method:: HttpRequest.is_secure() Retorna ``True`` se a requisição é segura; isto é, se ela foi feita com HTTPS. .. method:: HttpRequest.is_ajax() .. versionadded:: 1.0 Retorna ``True`` se a requisição foi feita via um ``XMLHttpRequest``, checando o cabeçalho ``HTTP_X_REQUESTED_WITH`` por um string ``'XMLHttpRequest'``. As seguintes bibliotecas JavaScript enviam seus cabeçalhos: * jQuery * Dojo * MochiKit * MooTools * Prototype * YUI Se você escrever sua própria chamada XMLHttpRequest (no lado do navergador), terá de setar este cabeçalho manualmente se quiser que o ``is_ajax()``. Objetos QueryDict ----------------- .. class:: QueryDict Num objeto :class:`HttpRequest`, os atributos ``GET`` e ``POST`` são instâncias do ``django.http.QueryDict``. O :class:`QueryDict` é uma classe tipo dicionário customizada para lidar com múltiplos valores para a mesma chave. Isto é necessário porquê alguns elementos de formulário HTML, notavelmente, ``