{"title":"Aplicações","version":"3.1","locale":"pt-br","docname":"ref/applications","url":"/pt-br/3.1/ref/applications/","canonical":"https://djangodocs.dev/pt-br/3.1/ref/applications/","summary":"Django contém um registro de aplicações instaladas que armazena configuração e fornece introspecção. Ele também mantem uma lista de modelos </topics/db/models…","html":"<span id=\"applications\"></span><h1>Aplicações<a class=\"heading-anchor\" href=\"#module-django.apps\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django contém um registro de aplicações instaladas que armazena configuração e fornece introspecção. Ele também mantem uma lista de <span class=\"xref std std-doc\">modelos &lt;/topics/db/models</span> disponíveis.</p>\n<p>Esse registro é chamado de <a class=\"reference internal\" href=\"#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code></a> e está disponível em <a class=\"reference internal\" href=\"#module-django.apps\" title=\"django.apps\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.apps</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_app_config</span><span class=\"p\">(</span><span class=\"s1\">&#39;admin&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">verbose_name</span>\n<span class=\"go\">&#39;Administration&#39;</span>\n</code></pre></div>\n<section id=\"projects-and-applications\">\n<h2>Projetos e aplicações<a class=\"heading-anchor\" href=\"#projects-and-applications\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>O termo <strong>project</strong> descreve uma aplicação web Django. O pacote de projeto Python é definido primariamente por um módulo de configuração, que geralmente contêm outras coisas. Por exemplo, quando você executa <code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span> <span class=\"pre\">mysite</span></code> você criará um diretório de projeto <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> que contêm o pacote Python <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite</span></code> com os módulos <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code>, e <code class=\"docutils literal notranslate\"><span class=\"pre\">wsgi.py</span></code>. O pacote do projeto geralmente é extendido para incluir outras coisas como fixtures, CSS e templates que não estão atrelados à nenhuma aplicação em particular.</p>\n<p>O <strong>project’s root directory</strong> (aquele que contêm <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code>) é geralmente o container de todas as aplicações do projeto que não estão instaladas separadamente.</p>\n<p>O termo <strong>application</strong> descreve um pacote Python que prove alguns conjunto de recursos. Aplicativos <a class=\"reference internal\" href=\"/pt-br/3.1/intro/reusable-apps/\"><span class=\"doc\">devem ser reutilizados</span></a> em projetos diferentes.</p>\n<p>Aplicações abrigam combinações de modelos, views, templates, templates tags, static files, URLs, middleware, etc. Estas são comumente ligados ao projeto na definição <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> e opcionalmente em outros mecanismos como URLconfs, a definição <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a>, ou por herança de templates.</p>\n<p>É importante entender que uma aplicação Django é apenas um conjunto de código que interage com várias partes do framework. Não existe um objeto <code class=\"docutils literal notranslate\"><span class=\"pre\">Application</span></code> propriamente dito. Entretanto, existem alguns lugares onde o Django precisa interagir com estas aplicações instaladas, geralmente para configuração e introspecção. É por isso que o registro de aplicações mantém os metadados em uma instância <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> para cada aplicação instalada.</p>\n<p>Não existe nenhuma restrição que defina que um pacote de projeto não possa ser considerado uma aplicação e tenha seus próprios modelos, etc. (seria necessário adicionar a <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>).</p>\n</section>\n<section id=\"configuring-applications\">\n<span id=\"configuring-applications-ref\"></span><h2>Configurandos as aplicações<a class=\"heading-anchor\" href=\"#configuring-applications\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Para configurar uma aplicação, herde <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> e coloque um caminho pontuado a essa subclasse em <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.</p>\n<p>Quando o <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> contém o caminho baseado em pontos para uma aplicação, o Django procura por uma variável chamada <code class=\"docutils literal notranslate\"><span class=\"pre\">default_app_config</span></code> dentro do módulo.</p>\n<p>Caso esteja definido, é o caminho em notação de ponto até a <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> subclasse para aquela aplicação.</p>\n<p>Se não existir uma variável <code class=\"docutils literal notranslate\"><span class=\"pre\">default_app_config</span></code>, o Django usa a classe padrão <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">default_app_config</span></code> permite que aplicações que antecedem ao Django 1.7 tais como <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> utilizem o recurso <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> sem necessitar que o usuário atualize seus <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.</p>\n<p>Novas aplicações devem evitar <code class=\"docutils literal notranslate\"><span class=\"pre\">default_app_config</span></code>. Ao invés disso, eles deveriam usar um caminho pontuado para a subclasse de <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> apropriada para ser configurada explicitamente nas <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.</p>\n<section id=\"for-application-authors\">\n<h3>Para autores de aplicações<a class=\"heading-anchor\" href=\"#for-application-authors\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se você está criando uma app plugável chamada “Rock ‘n’ roll”, aqui está como você poderia prover um nome apropriado para o admin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># rock_n_roll/apps.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AppConfig</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RockNRollConfig</span><span class=\"p\">(</span><span class=\"n\">AppConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;rock_n_roll&#39;</span>\n    <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Rock ’n’ roll&quot;</span>\n</code></pre></div>\n<p>Você pode fazer sua aplicação carregar esta subclase <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code> por padrão da seguinte maneira:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># rock_n_roll/__init__.py</span>\n\n<span class=\"n\">default_app_config</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;rock_n_roll.apps.RockNRollConfig&#39;</span>\n</code></pre></div>\n<p>That will cause <code class=\"docutils literal notranslate\"><span class=\"pre\">RockNRollConfig</span></code> to be used when <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>\ncontains <code class=\"docutils literal notranslate\"><span class=\"pre\">'rock_n_roll'</span></code>. This allows you to make use of\n<a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> features without requiring your users to update\ntheir <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setting. Besides this use case, it’s best to\navoid using <code class=\"docutils literal notranslate\"><span class=\"pre\">default_app_config</span></code> and instead specify the app config class in\n<a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> as described next.</p>\n<p>You can also tell your users to put <code class=\"docutils literal notranslate\"><span class=\"pre\">'rock_n_roll.apps.RockNRollConfig'</span></code> in\ntheir <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setting. You can even provide several different\n<a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> subclasses with different behaviors and allow\nyour users to choose one via their <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setting.</p>\n<p>A convenção recomendado é colocar a  classe de configuração em um submódulo da aplicação chamada “apps”. No entento, isto não é imposto pelo Django.</p>\n<p>Você deve incluir <a class=\"reference internal\" href=\"#django.apps.AppConfig.name\" title=\"django.apps.AppConfig.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">name</span></code></a> atributo do Djando para determinar qual aplicação essa configuração se aplica. Você pode defenir qualquer atributo documentado na API referência <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a></p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Se o seu código importa o registro de aplicações no <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py</span></code> da aplicação, o nome <code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code> irá conflitar com o sub-módulo <code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code>. A melhor prática é mover esse código para um sub-módulo e importá-lo. Uma alternativa é importar o registro com um nome diferente:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span> <span class=\"k\">as</span> <span class=\"n\">django_apps</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"for-application-users\">\n<h3>Para usuários de aplicações<a class=\"heading-anchor\" href=\"#for-application-users\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se você está usando “Rock ’n’ roll” em um projeto chamado <code class=\"docutils literal notranslate\"><span class=\"pre\">anthology</span></code>, mas quer mostrá-lo como “Jazz Manouche”, você pode fornecer sua própria configuração:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># anthology/apps.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">rock_n_roll.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RockNRollConfig</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">JazzManoucheConfig</span><span class=\"p\">(</span><span class=\"n\">RockNRollConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Jazz Manouche&quot;</span>\n\n<span class=\"c1\"># anthology/settings.py</span>\n\n<span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s1\">&#39;anthology.apps.JazzManoucheConfig&#39;</span><span class=\"p\">,</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Novamente, definir classes de configuração de um projeto específico em um sub-módulo chamado <code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code> é uma convenção, não é requerido.</p>\n</section>\n</section>\n<section id=\"application-configuration\">\n<h2>Configuração da aplicação<a class=\"heading-anchor\" href=\"#application-configuration\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AppConfig</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Objetos de configuração de uma aplicação armazenam meta-dados para uma aplicacão. Alguns atributos podem ser configurados nas subclasses <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>. Outros são definidos pelo Django e são somente para leitura.</p>\n</dd></dl>\n\n<section id=\"configurable-attributes\">\n<h3>Atributos configuráveis<a class=\"heading-anchor\" href=\"#configurable-attributes\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.name\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>O caminho completo para do Python para a aplicação, exemplo: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code>.</p>\n<p>Este atributo define a qual aplicação a configuração se aplica. deve ser definido em todas as subclasses de <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>.</p>\n<p>Ele deve ser único dentro de todo o projeto Django.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.label\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">label</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.label\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Nome curto para a aplicação, ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin'</span></code></p>\n<p>Este atributo permite trocar o rótulo de uma aplicação quando duas aplicações tem rótulos conflitantes. Seu valor padrão é um último componente de <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>. ELe deve ser uma identificador Python válido.</p>\n<p>Ele deve ser único dentro de todo o projeto Django.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.verbose_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">verbose_name</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.verbose_name\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Nome legível para a aplicação, ex. “Administração”.</p>\n<p>O atributo padrão para `` label.title()``.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.path\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">path</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.path\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>caminho no Sistema de arquivo para o diretório da aplicação , ex.: ‘/usr/lib/pythonX.Y/dist-packages/django/contrib/admin’`.</p>\n<p>Na maioria dos casos, o Django pode automaticamente detectar e definir isso, mas você pode explicitamente sobrepor como um atributo de classe na sua sublcasse de <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>. Em alguma situações isso é requerido; por exemplo se o pacote da aplicação é um <a class=\"reference internal\" href=\"#namespace-package\">namespace package</a> com míltiplos caminhos.</p>\n</dd></dl>\n\n</section>\n<section id=\"read-only-attributes\">\n<h3>Atributos somente leitura<a class=\"heading-anchor\" href=\"#read-only-attributes\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.module\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">module</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.module\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Root module for the application, e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;module</span> <span class=\"pre\">'django.contrib.admin'</span> <span class=\"pre\">from</span>\n<span class=\"pre\">'django/contrib/admin/__init__.py'&gt;</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.models_module\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">models_module</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.models_module\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Module containing the models, e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;module</span> <span class=\"pre\">'django.contrib.admin.models'</span>\n<span class=\"pre\">from</span> <span class=\"pre\">'django/contrib/admin/models.py'&gt;</span></code>.</p>\n<p>Isso pode ser <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> se a aplicação nao contém um módulo <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>. Note que os sinais relacionados com o banco de dados tal como <a class=\"reference internal\" href=\"/pt-br/3.1/ref/signals/#django.db.models.signals.pre_migrate\" title=\"django.db.models.signals.pre_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_migrate</span></code></a> e <a class=\"reference internal\" href=\"/pt-br/3.1/ref/signals/#django.db.models.signals.post_migrate\" title=\"django.db.models.signals.post_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_migrate</span></code></a> somente são emitidos por aplicações que conténham o módulo <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"methods\">\n<h3>Métodos<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.get_models\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_models</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.get_models\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retornar um iterável de classes <a class=\"reference internal\" href=\"/pt-br/3.1/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Model</span></code></a> para esta aplicação.</p>\n<p>Requer que o registro do aplicativo esteja totalmente povoado.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.get_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">require_ready</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.get_model\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retorna a <a class=\"reference internal\" href=\"/pt-br/3.1/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Model</span></code></a> com o nome dado <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> é insensível à capitularização -case-insensitive-.</p>\n<p>Resultará em :exc:’LookupError’ se esse modelo não existir na aplicação.</p>\n<p>Requer o registro da aplicação para ser populado totalmente, a não ser que o argumento <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> esteja definido como <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.  <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> se comporta exatamente como em  <a class=\"reference internal\" href=\"#django.apps.apps.get_model\" title=\"django.apps.apps.get_model\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">apps.get_model()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.ready\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ready</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.ready\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Subclasses podem substituir este método para realizar tarefas de inicialização tal como registrar “signals”. Ele é chamado tão logo o registro seja populado.</p>\n<p>Entretanto você não pode importar modelos a nível de modulo onde as classes <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> são definidas, você pode faze-lo in <code class=\"docutils literal notranslate\"><span class=\"pre\">ready()`,</span> <span class=\"pre\">usando</span> <span class=\"pre\">tanto</span> <span class=\"pre\">uma</span> <span class=\"pre\">instrução</span> <span class=\"pre\">de</span> <span class=\"pre\">``import</span></code> ou <a class=\"reference internal\" href=\"#django.apps.AppConfig.get_model\" title=\"django.apps.AppConfig.get_model\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_model()</span></code></a>.</p>\n<p>Se estiver registrando <a class=\"reference internal\" href=\"/pt-br/3.1/ref/signals/#module-django.db.models.signals\" title=\"django.db.models.signals: Signals sent by the model system.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">model</span> <span class=\"pre\">signals</span></code></a>, você pode referenciar o emissor por um rotulo string ao invés da classe do modelo</p>\n<p>Exemplo</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AppConfig</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">pre_save</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RockNRollConfig</span><span class=\"p\">(</span><span class=\"n\">AppConfig</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">ready</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># importing model classes</span>\n        <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyModel</span>  <span class=\"c1\"># or...</span>\n        <span class=\"n\">MyModel</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s1\">&#39;MyModel&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># registering signals with the model&#39;s string label</span>\n        <span class=\"n\">pre_save</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">receiver</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"s1\">&#39;app_label.MyModel&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Aviso</p>\n<p>Embora você possa acessar classes de modelo como descrito acima, evite interagir co o banco de dados dentro da implementação do seu <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a>. Isso inclui métodos de modelos que executam “queries” (<a class=\"reference internal\" href=\"/pt-br/3.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>, <a class=\"reference internal\" href=\"/pt-br/3.1/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>, métodos de gerenciamento e etc.), e também “queries” SQL explicitas através do <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.connection</span></code>. Seu método <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a> irá rodar durante o início de cada comando de gerenciamento. Por exemplo, apesar de a configuração do banco de dados de teste ser separado das definições de produção, o <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">test</span></code> ainda poderia executar algumas “queries” no seu banco de dados de <strong>produção</strong>.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>No processo de inicialização normal, o método <code class=\"docutils literal notranslate\"><span class=\"pre\">ready</span></code> somente é chamado uma vez pelo Django. Mas em alguns casos excepcionais, particularmente em testes os quais estão mexendo com aplicações instaladas, o <code class=\"docutils literal notranslate\"><span class=\"pre\">ready</span></code> talvez seja chamado mais de uma vez. Neste caso, ou escreva métodos indepotentes, ou coloque um indicador nas suas classes <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code> para prevenir re-executar código o qual deveria rodar exatamente uma vez.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"namespace-packages-as-apps\">\n<span id=\"namespace-package\"></span><h3>Namespace packages as apps<a class=\"heading-anchor\" href=\"#namespace-packages-as-apps\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pacotes Python sem o “__init__.py” são conhecidos como “namespace packages” e podem estar espalhados entre multiplos diretorios em locais diferentes em “sys.path” (veja :pep:’420’).</p>\n<p>Aplicações Django requerem um único caminho baseado no sistema de arquivos onde o Django (dependendo da configuração) irá procurar por templates, ativos estáticos, etc. Sendo assim, pacotes de espaço de nomes podem ser aplicações Django somente se uma das seguintes for verdadeiro:</p>\n<ol class=\"arabic simple\">\n<li><p>O pacote de espaço de nome tem na verdade somente um localização (ex.: não está distribuído em mais de um diretório)</p></li>\n<li><p>A classe <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> usada para configurar a aplicação tem um atributo de classe <a class=\"reference internal\" href=\"#django.apps.AppConfig.path\" title=\"django.apps.AppConfig.path\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">path</span></code></a>, o qual é o caminho absoluto do diretório que o Django irá usar como o único caminho básico  para a aplicação.</p></li>\n</ol>\n<p>Se nenhuma destas condições forem atendidas, Django irá emitir um erro <a class=\"reference internal\" href=\"/pt-br/3.1/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ImproperlyConfigured</span></code></a>.</p>\n</section>\n</section>\n<section id=\"application-registry\">\n<h2>Registro do Aplicativo<a class=\"heading-anchor\" href=\"#application-registry\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps\">\n<span class=\"sig-name descname\"><span class=\"pre\">apps</span></span><a class=\"heading-anchor\" href=\"#django.apps.apps\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>O registro da aplicação fornece a seguinte API pública. Métodos que não estão listados abaixo são considerados privados e talvez mudem sem serem noticiados.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.ready\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ready</span></span><a class=\"heading-anchor\" href=\"#django.apps.apps.ready\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Atributo booleano que é passado para <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> depois que o registro está totalmente populado e todos os métodos <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AppConfig.ready()</span></code></a> são chamados.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_app_configs\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_app_configs</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_app_configs\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retorna um iterável de instancias de <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_app_config\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_app_config</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_label</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_app_config\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retorna uma <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> para a aplicação com o dado <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code>. Emite um erro <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(em Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> se tal aplicação não existir.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.is_installed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_installed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.is_installed\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Verifique se uma aplicação com o dado nome existe no registro. <code class=\"docutils literal notranslate\"><span class=\"pre\">app_name</span></code> é o nome completo  da app, exemplo <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_label</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">require_ready</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_model\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Retorna a <a class=\"reference internal\" href=\"/pt-br/3.1/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Model</span></code></a> com o dado <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code> e``model_name``. Como um atalho, esse método também aceita um simples argumento na forma de <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label.model_name</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> é case-insensitive, ou seja, não diferencia maiúsculas e minúsculas.</p>\n<p>Emite <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(em Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> se a tal aplicação ou modelo não existir. Emite  <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(em Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a> quando chamado com um argumento único que não contém exatamente um ponto.</p>\n<p>Requer o registro da aplicação para ser populado totalmente, a não ser que o argumento <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> esteja definido como <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Definindo o <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code>  para <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> permite procurar por padrões :ref:` enquanto o registro da aplicação esta sendo preenchido &lt;app-loading-process&gt;`, especificamente durante a segunda fase onde ele importa os modelos/padroes. Então <code class=\"docutils literal notranslate\"><span class=\"pre\">get_model()</span></code> têm o mesmo efeito de importar um modelo. O caso de uso principal é para configurar as classes de modelo com configurações, como <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTH_USER_MODEL</span></code></a>.</p>\n<p>Quando <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> é <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">get_model()</span></code> retorna uma classe de modelo que talvez não seja totalmente funcional (acessores reversos podem estar faltando, por exemplo) enquanto o registro do app não está completo. Por isso, é melhor deixar <code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> com seu valor padrão <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> sempre que possível.</p>\n</dd></dl>\n\n</section>\n<section id=\"initialization-process\">\n<span id=\"app-loading-process\"></span><h2>Processo de Inicialização<a class=\"heading-anchor\" href=\"#initialization-process\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"how-applications-are-loaded\">\n<h3>Como as aplicações são carregadss<a class=\"heading-anchor\" href=\"#how-applications-are-loaded\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Quando o Django inicia, a <a class=\"reference internal\" href=\"#django.setup\" title=\"django.setup\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code></a> é responsável por popular o registro da aplicação.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.setup\">\n<span class=\"sig-name descname\"><span class=\"pre\">setup</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">set_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.setup\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Configura o Django através:</p>\n<ul class=\"simple\">\n<li><p>Carregando configurações</p></li>\n<li><p>Configurando o “logging”.</p></li>\n<li><p>Se <code class=\"docutils literal notranslate\"><span class=\"pre\">set_prefix</span></code> é igual a True, definindo o prefixo do escript que resolve URL para <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-FORCE_SCRIPT_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORCE_SCRIPT_NAME</span></code></a> se estiver definido, ou caso contrário para <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code>.</p></li>\n<li><p>Inicializando o registro do aplicativo.</p></li>\n</ul>\n<p>Essa função é chamada automáticamente.</p>\n<ul class=\"simple\">\n<li><p>Quando rodar um servidor HTTP via suporte WSGI do Django.</p></li>\n<li><p>Quando invocar um comando de gerenciamento.</p></li>\n</ul>\n<p>Ele deve ser chamado explicitamente em outros casos, por exemplo em scripts Python.</p>\n</dd></dl>\n\n<p>O registro da aplicaçào é inicializado em três estágios. Em cada estágio, o Django processa todas as aplicações na ordem que estÃo em <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.</p>\n<ol class=\"arabic\">\n<li><p>Primeiro Django importa cada item que está no <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>.</p>\n<p>Se ele é uma class de configuração de aplicação, o Django importa a raiz do pacote da aplicação, definida pelo seu atributo <a class=\"reference internal\" href=\"#django.apps.AppConfig.name\" title=\"django.apps.AppConfig.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">name</span></code></a>. Se for um pacote Python, o Django cria uma configuração de aplicação padrão.</p>\n<p><em>Neste momento, seu código não deveria importar nenhum modelo!</em></p>\n<p>Em outras opalavras, os pacotes da raiz da sua aplicação e os módulos que definem sua classes de configuração da aplicação não deveriam importar nenhum modelo, mesmo que indiretamente.</p>\n<p>Falando estritamente, o Django permite importar modelos uma vez que a aplicação de configuração está carregada. No entanto , a fim de evitar limitações desnecessárias na ordem definida em <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, recomendamos fortemente não importar qualquer modelo neste estágio.</p>\n<p>Uma vez que este estágio se complete, as APIs que manipulam as configurações da aplicação tal como <a class=\"reference internal\" href=\"#django.apps.apps.get_app_config\" title=\"django.apps.apps.get_app_config\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_app_config()</span></code></a> se tornam disponíveis.</p>\n</li>\n<li><p>Então o Django tenta importar o submódulo <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> de cada aplicação, se houver uma.</p>\n<p>Você deve definir ou importar todos os modelos no seu <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code> ou no <code class=\"docutils literal notranslate\"><span class=\"pre\">models/__init__.py</span></code> da sua aplicação. De outtro modo, o registro da aplicação talvez não seja totalmente populado neste ponto, o que pode causar um malfuncionamento do ORM.</p>\n<p>Uma vez que este estágio esteja completo, as APIs que operam nos modelos tal como  <a class=\"reference internal\" href=\"#django.apps.apps.get_model\" title=\"django.apps.apps.get_model\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_model()</span></code></a> se tornam usáveis.</p>\n</li>\n<li><p>Finalmente o Django executa o método <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a> de cada configuração da aplicação.</p></li>\n</ol>\n</section>\n<section id=\"troubleshooting\">\n<span id=\"applications-troubleshooting\"></span><h3>Solução de Problemas<a class=\"heading-anchor\" href=\"#troubleshooting\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Aqui estão alguns problemas comuns que você talvez encontre durante a inicialização:</p>\n<ul>\n<li><p><a class=\"reference internal\" href=\"/pt-br/3.1/ref/exceptions/#django.core.exceptions.AppRegistryNotReady\" title=\"django.core.exceptions.AppRegistryNotReady\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppRegistryNotReady</span></code></a>: Isso acontece quando se importa uma configuração de aplicação ou um módulo de um modelo que aciona um código que depende do registro do app.</p>\n<p>For example, <a class=\"reference internal\" href=\"/pt-br/3.1/ref/utils/#django.utils.translation.gettext\" title=\"django.utils.translation.gettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext()</span></code></a> uses the app\nregistry to look up translation catalogs in applications. To translate at\nimport time, you need <a class=\"reference internal\" href=\"/pt-br/3.1/ref/utils/#django.utils.translation.gettext_lazy\" title=\"django.utils.translation.gettext_lazy\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext_lazy()</span></code></a>\ninstead. (Using <a class=\"reference internal\" href=\"/pt-br/3.1/ref/utils/#django.utils.translation.gettext\" title=\"django.utils.translation.gettext\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gettext()</span></code></a> would be a bug,\nbecause the translation would happen at import time, rather than at each\nrequest depending on the active language.)</p>\n<p>Executar as queries de banco de dados com o ORM em tempo de importação nos módulo de modelos também irá disparar a mesma exceção. O ORM não pode funcionar devidamente até que todos os modelos estejam disponíveis.</p>\n<p>Essa exceção também acontece se você chamar <a class=\"reference internal\" href=\"#django.setup\" title=\"django.setup\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code></a> em um script Python autônomo.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ImportError:</span> <span class=\"pre\">cannot</span> <span class=\"pre\">import</span> <span class=\"pre\">name</span> <span class=\"pre\">...</span></code> Isso acontece se a sequência de importação termina em um loop.</p>\n<p>Para eliminar tais problemas, você deve minimizar a dependências entre seus módulos de modelos e fazer o menos possível durante o tempo de importação. Para evitar a execução de código em tempo de imporatação você pode move-lo para uma função e cachear seus resultados. O código será executado quando você precisar dos resultados pela primeira vez. Este conceito é conhecido como “avaliação preguiçosa”.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> automaticamene realiza a auto-descoberta od módulos do <code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></code> nas aplicações instaladas. Para impedir isso, altere seu <a class=\"reference internal\" href=\"/pt-br/3.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> para que contenha o <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin.apps.SimpleAdminConfig'</span></code> ao invés do <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code>.</p></li>\n</ul>\n</section>\n</section>","rootId":"module-django.apps","toc":[{"title":"Projetos e aplicações","anchor":"projects-and-applications","children":[]},{"title":"Configurandos as aplicações","anchor":"configuring-applications","children":[{"title":"Para autores de aplicações","anchor":"for-application-authors","children":[]},{"title":"Para usuários de aplicações","anchor":"for-application-users","children":[]}]},{"title":"Configuração da aplicação","anchor":"application-configuration","children":[{"title":"Atributos configuráveis","anchor":"configurable-attributes","children":[]},{"title":"Atributos somente leitura","anchor":"read-only-attributes","children":[]},{"title":"Métodos","anchor":"methods","children":[]},{"title":"Namespace packages as apps","anchor":"namespace-packages-as-apps","children":[]}]},{"title":"Registro do Aplicativo","anchor":"application-registry","children":[]},{"title":"Processo de Inicialização","anchor":"initialization-process","children":[{"title":"Como as aplicações são carregadss","anchor":"how-applications-are-loaded","children":[]},{"title":"Solução de Problemas","anchor":"troubleshooting","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Referência da API","url":"/pt-br/3.1/ref/"}],"prev":{"docname":"ref/index","title":"Referência da API","url":"/pt-br/3.1/ref/"},"next":{"docname":"ref/checks","title":"O framework de verificação do sistema.","url":"/pt-br/3.1/ref/checks/"},"formats":{"html":"/pt-br/3.1/ref/applications/","markdown":"/pt-br/3.1/ref/applications.md","json":"/pt-br/3.1/ref/applications.json"},"source":"https://github.com/django/django/blob/stable/3.1.x/docs/ref/applications.txt","official":"https://docs.djangoproject.com/pt-br/3.1/ref/applications/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}