estrutura Django projeto, a estrutura de compartilhar um modelo estendido auth "Usuário" em aplicativos recomendados?

votos
1

Eu estou querendo saber o que a estrutura do projeto / aplicação comum é quando o modelo de usuário estendida / sub-classificada e este modelo User resultante é compartilhada e usada em vários aplicativos.

Eu gostaria de referenciar o mesmo modelo de usuário em vários aplicativos. Eu não construí a interface de login ainda, então eu não tenho certeza de como deve se encaixam.

A seguir vem à mente:

project.loginapp.app1
project.loginapp.app2

Existe um padrão comum para esta situação? Seria login do melhor ser tratado por um 'aplicativo login'?

Semelhante a esta pergunta, mas mais específico. configuração aplicação django

ATUALIZAR

Esclarecido o meu caso de uso acima. Eu gostaria de adicionar campos (estender ou subclasse?) Para o modelo de usuário auth existente. E então referenciar esse modelo em vários aplicativos.

Publicado 23/02/2009 em 03:17
fonte usuário
Em outras línguas...                            


3 respostas

votos
6

Por que você está estendendo usuário? Por favor, esclareça.

Se você está adicionando mais informações sobre os usuários, você não precisa rolar o seu próprio sistema de usuário e autenticação. A versão de Django do que é bastante sólida. O gerenciamento de usuário está localizado na django.contrib.auth.

Se você precisa para personalizar as informações armazenadas com os usuários, primeiro definir um modelo como

class Profile(models.Model):
    ...
    user = models.ForeignKey("django.contrib.auth.models.User", unique=True)

e em seguida, definir

AUTH_PROFILE_MODULE = "appname.profile"

em seu settings.py

A vantagem de definir esta permite que você use um código como este em seus pontos de vista:

def my_view(request):
    profile = request.user.get_profile()
    etc...

Se você está tentando fornecer mais maneiras para os usuários para autenticar, você pode adicionar um backend auth. Estender ou reimplementar django.contrib.auth.backends.ModelBackend e defini-lo como seus AUTHENTICATION_BACKENDS em settings.py.

Se você quiser fazer uso de um conceito permissões diferentes ou grupos do que é fornecido pelo Django, não há nada que vai impedi-lo. Django faz uso desses dois conceitos apenas em django.contrib.admin (que eu saiba), e você está livre para usar algum outro conceito para esses tópicos como você vê o ajuste.

Respondeu 23/02/2009 em 03:27
fonte usuário

votos
3

Você deve primeiro verificar se o módulo contrib.auth satisfaz as suas necessidades, para que você não tem que reinventar a roda:

http://docs.djangoproject.com/en/dev/topics/auth/#topics-auth

editar:

Verifique esse trecho que cria um UserProfile após a criação de um novo usuário.

def create_user_profile_handler(sender, instance, created, **kwargs):
    if not created: return

    user_profile = UserProfile.objects.create(user=instance)
    user_profile.save()

post_save.connect(create_user_profile_handler, sender=User) 
Respondeu 23/02/2009 em 03:22
fonte usuário

votos
2

Eu acho que o 'app / projeto' nomes são mal escolhido. é mais como 'site / módulo'. um aplicativo pode ser muito útil sem ter pontos de vista, por exemplo.

verificar as conversações DjangoCon 2008 no YouTube, especialmente aquela sobre aplicativos reutilizáveis , ele vai fazer você pensar totalmente diferente sobre como estruturar seu projeto.

Respondeu 23/02/2009 em 03:25
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more