Pergunta

Toda vez que eu abrir uma página que eu quero para obter o ID de projeto atualmente ativo. Isto será feito por chacking o subdomínio e verificar o usuário conectado no momento pode vê-lo.

Uma vez que eu alcanço meu ponto de vista eu quero ser capaz de fazer

tasks = Task.objects.filter(project = current_project)

Onde current_project (ou CURRENT_PROJECT ou current_project ???) já foi configurado.

Alguém pode explicar os prós / contras das várias abordagens que tenho encontrado nos docs e me colocou no caminho certo?

  1. Sessões
  2. Middleware
  3. Enfiar
  4. builtins

Este foi como eu fiz isso no final:

Decorator:

def check4project(fn):

    current_project = 'fred'
    def check(*args, **kw):
        kw['project']=current_project
        return fn(*args, **kw)
    return check

Veja o exemplo

@login_required
@check4project
@tweetpost
def index(request, project=0):

    print project
Foi útil?

Solução

Tudo depende do que sua semântica de "projeto atual" são. Aqui estão algumas possibilidades:

  1. Poderia ser uma característica do usuário: ele visita sua página de perfil e define um projeto atual. Este seria armazenado no banco de dados, e você acessá-lo com o ORM.

  2. Poderia ser uma característica do URL, com base exclusivamente no subdomínio. Isso poderia ser feito com middleware, que tem acesso ao pedido, e poderia, por exemplo, analisar o nome do host e definir um atributo personalizado na solicitação que você pode acessar em suas funções view.

  3. Semelhante ao # 2, você poderia usar um decorador de visão se verificando projetos é feito para alguns pontos de vista, mas não todos. Isto é semelhante ao decoradores do Django para a verificação de autorização.

  4. Poderia ser uma característica da visita do usuário ao site: ele visita uma página de projetos, escolhe um para trabalhar, e é pegajoso até que ele escolhe um outro projeto. Isso seria melhor armazenado na sessão, que é especificamente para este tipo de armazenamento temporário.

De sua descrição, ele sounsd como # 2 ou # 3 é o melhor para você, dependendo de como suas opiniões dividem-se entre cuidar cerca de subprojetos e não.

Outras dicas

Você poderia fazer um context_processor e, em seguida, obter o seu valor a partir do objeto de solicitação.

Você considerou um custom tag ?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top