Supervisord和系统

芹菜

Rabbitmq和Redis

如何:通过API异步上载

在geonode中可以通过API以异步/同步方式上传资源。

下面是通过https://github.com/GeoNode/geonode/blob/582d6efda74adb8042d1d897004bbf764e6e0285/geonode/upload/api/tests.py#L416接口上传的完整示例

第一步

创建公共客户端会话,这是基础,因为geonode将检查请求会话。例如,对于请求,我们将执行如下操作:

import requests
client = requests.session()

注意:在Django中,此部件已被管理

第二步

调用 api/v2/uploads/upload PUT中的端点(是一个表单数据端点),方法是在文件中指定一个包含名称和我们要上传的文件的字典,以及一个包含所需信息的数据有效负载。例如:

params = {
    "permissions": '{ "users": {"AnonymousUser": ["view_resourcebase"]} , "groups":{}}',  # layer permissions
    "time": "false",
    "layer_title": "layer_title",
    "time": "false",
    "charset": "UTF-8",
}

files = {
    "filename": <_io.BufferedReader name="filename">
}

client.put(
    "http://localhost:8000/api/v2/uploads/upload/",
    auth=HTTPBasicAuth(username, password),
    data=params,
    files=files,
)

Returns:
- dict with import id of the resource

第三步

在最终上传页面中调用,以触发实际导入。如果设置了Correclty,Geoserver将异步管理上传。

client.get("http://localhost:8000/upload/final?id={import_id}")

The `import_id` is returned from the previous step

第四步

上传已经在GeoNode上完成,我们应该检查直到Geoserver完成他的部分。要做到这一点,只需调用有关我们正在执行的上载的详细信息就足够了

client.get(f"http://localhost:8000/api/v2/uploads/{upload_id}")

当状态为 PROCESSED 完成的是 100% 我们可以在geonode和Geoserver中查看资源