{"title":"测试 GeoDjango 应用程序","version":"6.0","locale":"zh-hans","docname":"ref/contrib/gis/testing","url":"/zh-hans/6.0/ref/contrib/gis/testing/","canonical":"https://djangodocs.dev/zh-hans/6.0/ref/contrib/gis/testing/","summary":"本文档中还包括一些供 PostGIS 用户使用的附加注释和设置。 PostGIS Link to this heading # 配置 Link to this heading # Note 下面的设置具有合理的默认值，不应需要手动设置。 POSTGIS_VERSION Link to this heading # 当…","html":"<h1>测试 GeoDjango 应用程序<a class=\"heading-anchor\" href=\"#testing-geodjango-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>本文档中还包括一些供 <a class=\"reference internal\" href=\"#testing-postgis\"><span class=\"std std-ref\">PostGIS</span></a> 用户使用的附加注释和设置。</p>\n<section id=\"postgis\">\n<span id=\"testing-postgis\"></span><h2>PostGIS<a class=\"heading-anchor\" href=\"#postgis\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"settings\">\n<h3>配置<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>下面的设置具有合理的默认值，不应需要手动设置。</p>\n</aside>\n<section id=\"postgis-version\">\n<span id=\"std-setting-POSTGIS_VERSION\"></span><h4><code class=\"docutils literal notranslate\">POSTGIS_VERSION</code><a class=\"heading-anchor\" href=\"#postgis-version\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>当 GeoDjango 的空间后端在 PostGIS 上初始化时，必须执行一个 SQL 查询来确定版本，以便了解可用的功能。希望防止这个额外查询的高级用户可以手动设置版本，使用一个由整数三元组指定的 PostGIS 的主要、次要和微版本号。例如，要配置为 PostGIS X.Y.Z，您可以使用以下方式：</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>POSTGIS_VERSION <span class=\"o\">=</span> <span class=\"p\">(</span>X<span class=\"p\">,</span> Y<span class=\"p\">,</span> Z<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"obtaining-sufficient-privileges\">\n<h3>获得足够的权限<a class=\"heading-anchor\" href=\"#obtaining-sufficient-privileges\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>根据您的配置，本节描述了配置具有足够权限以在 PostgreSQL 上运行 GeoDjango 应用程序测试的数据库用户的几种方法。如果您的 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/gis/install/postgis/#spatialdb-template\"><span class=\"std std-ref\">空间数据库模板</span></a> 是按照说明创建的，那么您的测试数据库用户只需要具有创建数据库的能力。在其他配置中，您可能需要使用数据库超级用户。</p>\n<section id=\"create-database-user\">\n<h4>创建数据库普通用户<a class=\"heading-anchor\" href=\"#create-database-user\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>要创建一个具有创建数据库能力的数据库用户，请使用以下命令：</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ createuser --createdb -R -S &lt;user_name&gt;\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">-R -S</code> 标志表示我们不希望用户具有创建其他用户（角色）或成为超级用户的能力。</p>\n<p>或者，您可以从 SQL shell 更改现有用户的角色（假设这是从现有超级用户帐户执行的）：</p>\n<div class=\"code-block\" data-language=\"psql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code>postgres<span class=\"o\">#</span> <span class=\"k\">ALTER</span> <span class=\"k\">ROLE</span> <span class=\"o\">&lt;</span>user_name<span class=\"o\">&gt;</span> CREATEDB NOSUPERUSER NOCREATEROLE<span class=\"p\">;</span>\n</code></pre></div>\n</section>\n<section id=\"create-database-superuser\">\n<h4>创建数据库超级用户<a class=\"heading-anchor\" href=\"#create-database-superuser\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>这可以在创建用户的同时完成，例如：</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ createuser --superuser &lt;user_name&gt;\n</code></pre></div>\n<p>或者，您可以从 SQL shell 更改用户的角色（假设这是从现有超级用户帐户执行的）：</p>\n<div class=\"code-block\" data-language=\"psql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code>postgres<span class=\"o\">#</span> <span class=\"k\">ALTER</span> <span class=\"k\">ROLE</span> <span class=\"o\">&lt;</span>user_name<span class=\"o\">&gt;</span> SUPERUSER<span class=\"p\">;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"windows\">\n<h3>Windows<a class=\"heading-anchor\" href=\"#windows\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>在 Windows 平台上，您可以使用 pgAdmin III 实用程序将超级用户权限添加到您的数据库用户。</p>\n<p>默认情况下，在 Windows 上的 PostGIS 安装程序中包含一个名为 <code class=\"docutils literal notranslate\">template_postgis</code> 的空间数据库模板。</p>\n</section>\n</section>\n<section id=\"geodjango-tests\">\n<span id=\"id1\"></span><h2>GeoDjango 测试<a class=\"heading-anchor\" href=\"#geodjango-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>要在使用 <code class=\"docutils literal notranslate\">runtests.py</code> 运行 <a class=\"reference internal\" href=\"/zh-hans/6.0/internals/contributing/writing-code/unit-tests/#running-unit-tests\"><span class=\"std std-ref\">Django 测试套件时</span></a> 执行 GeoDjango 测试，设置文件中的所有数据库必须使用其中一个 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/gis/db-api/#spatial-backends\"><span class=\"std std-ref\">空间数据库后端</span></a>。</p>\n<section id=\"example\">\n<h3>例如<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>以下是一个示例的简单设置文件，其中包含可以用来运行整个 Django 测试套件的空间后端，包括 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/gis/#module-django.contrib.gis\" title=\"django.contrib.gis: Geographic Information System (GIS) extensions for Django\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.gis</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>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.gis.db.backends.postgis&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;geodjango&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;geodjango&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;other&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.gis.db.backends.postgis&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;other&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;geodjango&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n\nSECRET_KEY <span class=\"o\">=</span> <span class=\"s2\">&quot;django_tests_secret_key&quot;</span>\n</code></pre></div>\n<p>假设上述设置位于与 <code class=\"docutils literal notranslate\">runtests.py</code> 相同目录中的 <code class=\"docutils literal notranslate\">postgis.py</code> 文件中，那么在执行以下命令时，将执行所有 Django 和 GeoDjango 测试：</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ ./runtests.py --settings<span class=\"o\">=</span>postgis\n</code></pre></div>\n<p>要仅运行 GeoDjango 测试套件，请指定 <code class=\"docutils literal notranslate\">gis_tests</code>：</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>$ ./runtests.py --settings<span class=\"o\">=</span>postgis gis_tests\n</code></pre></div>\n</section>\n</section>","rootId":"testing-geodjango-apps","toc":[{"title":"PostGIS","anchor":"postgis","children":[{"title":"配置","anchor":"settings","children":[{"title":"POSTGIS_VERSION","anchor":"postgis-version","children":[]}]},{"title":"获得足够的权限","anchor":"obtaining-sufficient-privileges","children":[{"title":"创建数据库普通用户","anchor":"create-database-user","children":[]},{"title":"创建数据库超级用户","anchor":"create-database-superuser","children":[]}]},{"title":"Windows","anchor":"windows","children":[]}]},{"title":"GeoDjango 测试","anchor":"geodjango-tests","children":[{"title":"例如","anchor":"example","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/6.0/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/6.0/ref/contrib/"},{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/zh-hans/6.0/ref/contrib/gis/"}],"prev":{"docname":"ref/contrib/gis/sitemaps","title":"地理站点地图","url":"/zh-hans/6.0/ref/contrib/gis/sitemaps/"},"next":{"docname":"ref/contrib/gis/deployment","title":"部署 GeoDjango","url":"/zh-hans/6.0/ref/contrib/gis/deployment/"},"formats":{"html":"/zh-hans/6.0/ref/contrib/gis/testing/","markdown":"/zh-hans/6.0/ref/contrib/gis/testing.md","json":"/zh-hans/6.0/ref/contrib/gis/testing.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/contrib/gis/testing.txt","official":"https://docs.djangoproject.com/zh-hans/6.0/ref/contrib/gis/testing/","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"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}