InícioDocs para devsPacote Django: endpoint exclusivo do proprietário
Exemplos por kind 3 min de leitura

Pacote Django: endpoint exclusivo do proprietário

App confiável de servidor com manifesto, AppConfig, URL e leitura com verificação de permissão.

Objetivo e pré-requisitos

Disponibilize GET /examples/status/ ao proprietário autenticado da instalação. A resposta contém a versão pública da API Python e nenhum dado de campanha. É uma integração genérica independente, sem função de complemento de sistema de RPG.

Host alvo: 0.3.0, SDK 1.0.0. Textos da interface do exemplo estão em inglês. Preserve a versão solicitada ao adaptar.

Arquivos completos

Baixar pacote-fonte ZIP

Estes são fontes completos, sem assinatura. Depois de revisar o código, teste por Instalar de ZIP em um host descartável. Para publicar pelo Marketplace, prepare a assinatura e o catálogo da referência de assinatura e ativação. Nenhuma chave privada acompanha o download.

Manifesto completo

json
{
  "id": "example.server-status",
  "name": "Example server status",
  "version": "1.0.0",
  "sdk": {
    "requires": ">=1.0.0 <2.0.0",
    "tested": "1.0.0"
  },
  "description": "Trusted owner-only read endpoint with no models or background tasks.",
  "author": "Gravewright documentation examples",
  "license": "GPL-3.0-only",
  "django": {
    "apps": [
      "example_status.apps.ExampleStatusConfig"
    ]
  }
}

Código do exemplo

example_status/init.py

python

example_status/apps.py

python
from django.apps import AppConfig


class ExampleStatusConfig(AppConfig):
    name = "example_status"
    label = "example_status"
    gravewright_urlconf = "example_status.urls"

example_status/urls.py

python
from django.urls import path
from .views import status

urlpatterns = [path("examples/status/", status, name="example_status")]

example_status/views.py

python
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.views.decorators.http import require_GET
from api import API_VERSION


@login_required
@require_GET
def status(request):
    if request.user.role != "owner":
        return JsonResponse({"error": "permission_denied"}, status=403)
    return JsonResponse({"ok": True, "apiVersion": API_VERSION})

Como executar

  1. Revise todos os fontes Python. No host isolado, use Módulos → Instalar de ZIP com o ZIP-fonte. Para publicar no Marketplace, o registro assinado do catálogo precisa de type: django.

  2. A instalação apenas valida/extrai. Ative o app confiável explicitamente pelo Runner gerenciado ou main.py, com o supervisor e uv documentados.

  3. Após reiniciar, abra /examples/status/ como proprietário, participante e usuário anônimo. Desative e reinicie para remover a rota.

Resultado esperado e ciclo de vida

GET do proprietário retorna 200 com ok e apiVersion. Participante autenticado recebe 403. Usuário anônimo segue o redirecionamento normal de login. Outro método autenticado recebe 405. O exemplo não cria modelos, migrações nem tarefas em segundo plano.

Erros e limites

AppConfig ausente, labels duplicados ou manifesto/pins inválidos impedem instalação/ativação. Manifestos Django não podem conter entry, system ou locales. Execução Python exige ativação pelo proprietário; não coloque código de servidor em manifesto de navegador.

Como validar

  • Use RequestFactory ou Client isolado para conferir proprietário/participante/anônimo/método.

  • Confirme que a rota aparece só após ativação e leituras não alteram dados.

  • Revise checks/recuperação do supervisor; desativação normalmente não desfaz migrações, embora este exemplo não possua nenhuma.

Como usar a IA neste exemplo

text
Adapte example_status para um endpoint administrativo somente leitura do proprietário para [tarefa genérica]. Preserve autenticação, require_GET, autorização explícita, label AppConfig exclusivo e ausência de efeitos na inicialização. Para dados de campanha, use a API Python pública com Context autorizado real. Não contorne permissões com gravações ORM.