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
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
{
"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
example_status/apps.py
from django.apps import AppConfig
class ExampleStatusConfig(AppConfig):
name = "example_status"
label = "example_status"
gravewright_urlconf = "example_status.urls"example_status/urls.py
from django.urls import path
from .views import status
urlpatterns = [path("examples/status/", status, name="example_status")]example_status/views.py
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
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.
A instalação apenas valida/extrai. Ative o app confiável explicitamente pelo Runner gerenciado ou main.py, com o supervisor e uv documentados.
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
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.