Testing GeoDjango apps

本文档中包含PostGISSpatiaLite用户的一些附加注释和设置。

PostGIS

Settings

注意

以下设置具有合理的默认值,不需要手动设置。

POSTGIS_TEMPLATE

此设置可用于自定义要使用的PostGIS模板数据库的名称。它自动默认为'template_postgis'(与installation documentation中使用的名称相同)。

POSTGIS_VERSION

当GeoDjango的空间后端在PostGIS上初始化时,它必须执行SQL查询以确定版本,以便找出可用的功能。希望防止此额外查询的高级用户可以使用整数的三元组手动设置版本,指定PostGIS的major,minor和micro版本号。例如,要配置PostGIS X.Y.Z,您将使用:

POSTGIS_VERSION = (X, Y, Z)

Obtaining sufficient privileges

根据您的配置,本节介绍几种方法来配置具有足够权限的数据库用户在PostgreSQL上运行GeoDjango应用程序的测试。如果您按照说明创建了spatial database template,那么测试数据库用户只需要具有创建数据库的能力。在其他配置中,可能需要使用数据库超级用户。

Create database user

要使数据库用户能够创建数据库,请使用以下命令:

$ createuser --createdb -R -S <user_name>

-R -S标志表示我们不希望用户能够创建其他用户(角色)或成为超级用户。

或者,您可以从SQL shell更改现有用户的角色(假设这是从现有的超级用户帐户完成的):

postgres# ALTER ROLE <user_name> CREATEDB NOSUPERUSER NOCREATEROLE;

Create database superuser

这可以在创建用户时完成,例如:

$ createuser --superuser <user_name>

或者,您可以从SQL shell(假设这是从现有的超级用户帐户完成)更改用户的角色:

postgres# ALTER ROLE <user_name> SUPERUSER;

Create a database using PostGIS version 2

使用PostGIS 2测试项目时,将使用CREATE EXTENSION postgis t2>指令,前提是当前数据库中不存在模板template_postgis(或根据POSTGIS_TEMPLATE命名)。

Windows

在Windows平台上,pgAdmin III实用程序也可以用作向数据库用户添加超级用户权限的简单方法。

默认情况下,Windows上的PostGIS安装程序包括名为template_postgis的模板空间数据库。

SpatiaLite

确保在测试空间数据库中创建必要的空间表,如Creating a spatial database for SpatiaLite中所述。然后只需这样做:

$ python manage.py test

GeoDjango tests

To have the GeoDjango tests executed when running the Django test suite with runtests.py all of the databases in the settings file must be using one of the spatial database backends.

Example

以下是具有空间后端的示例裸机设置文件,可用于运行整个Django测试套件,包括django.contrib.gis中的测试套件:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'geodjango',
        'USER': 'geodjango',
    },
   'other': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'other',
        'USER': 'geodjango',
   }
}

SECRET_KEY = 'django_tests_secret_key'

假设上面的设置在与runtests.py相同的目录中的postgis.py文件中,则在执行命令时将执行所有Django和GeoDjango测试:

$ ./runtests.py --settings=postgis

要仅运行GeoDjango测试套件,请指定gis_tests

$ ./runtests.py --settings=postgis gis_tests