Django UserProfile ... sem uma senha

votos
3

Eu gostaria de criar um subconjunto de usuários que não têm um login ... basicamente como uma forma de adicionar um campo fotógrafo para fotos sem ter uma conta soprado completo associado com essa pessoa (uma vez que, em muitos casos, eles vão nunca realmente fazer login para o site). A ressalva é que eu também gostaria de ser capaz de habilitar uma conta para eles mais tarde.

Então, eu acho que a questão torna-se qual é a melhor maneira de criar uma tabela Pessoas que une a tabela de usuário sem realmente estendendo tabela user com UserProfile.

Publicado 05/10/2008 em 15:29
fonte usuário
Em outras línguas...                            


7 respostas

votos
7

Um perfil de usuário (como retornado por django.contrib.auth.models.User.get_profile) não se estende a tabela de usuário - o modelo que você especificar como o modelo de perfil com a AUTH_PROFILE_MODULEconfiguração é apenas um modelo que tem um ForeignKeya User. get_profileeo ambiente são realmente apenas uma API de conveniência para acessar uma instância de um modelo específico que tem um ForeignKeya um específico Userinstância.

Como tal, uma opção é criar um modelo de perfil no qual o ForeignKeyque Userpode ser nulle associar o seu Photomodelo com este modelo perfil em vez do Usermodelo. Isso permitirá que você criar um perfil para um usuário não-existente e anexar um usuário registrado para o perfil em uma data posterior.

Respondeu 05/10/2008 em 15:53
fonte usuário

votos
3

Fornecer sua própria rotina de autenticação, então você pode verificar (ou não verificar) o que quiser. Fazemos isso para se falharem no nome de usuário normal, nós também podemos deixá-los em e-mail / senha (embora isso não é o que eu estou mostrando a seguir).

em settings.py:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'userprofile.my_authenticate.MyLoginBackend', # if they fail the normal test
 )

em userprofile / my_authenticate.py:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User

class MyLoginBackend(ModelBackend):
    """Return User record if username + (some test) is valid.
       Return None if no match.
    """

    def authenticate(self, username=None, password=None, request=None):
        try:
            user = User.objects.get(username=username)
            # plus any other test of User/UserProfile, etc.
            return user # indicates success
        except User.DoesNotExist:
            return None
    # authenticate
# class MyLoginBackend
Respondeu 07/10/2008 em 01:40
fonte usuário

votos
3

Usuários que não pode entrar no fórum? Apenas deu-lhes uma senha totalmente aleatória.

import random
user.set_password( str(random.random()) )

Eles nunca vai ser capaz de fazer logon.

Respondeu 05/10/2008 em 19:57
fonte usuário

votos
0

Outra upvote para a resposta de insin : lidar com isso através de uma UserProfile. James Bennett tem um ótimo artigo sobre a extensão django.contrib.auth.models.User. Ele caminha através de um par de métodos, explica suas vantagens / desvantagens e terras na UserProfileforma ideal.

Respondeu 07/10/2008 em 23:09
fonte usuário

votos
0

O django.contrib.auth.models.User existe unicamente para o propósito de usar backend de autenticação padrão (banco de dados baseado). Se você escrever seu próprio back-end, você pode fazer algumas contas sem senha, mantendo normais contas com senhas. Documentação Django tem um capítulo sobre isso .

Respondeu 07/10/2008 em 10:23
fonte usuário

votos
0

Usando um modelo com um campo ForeignKey ligando para usuário pode não funcionar como você quer porque você precisa de acesso anônimo. Eu não tenho certeza se isso vai funcionar, mas você pode tentar o que acontece se você deixá-lo ter um ForeignKey para AnonymousUser (cujo ID é sempre Ninguém!) Em vez.

Se você tentar isso, postar seus resultados aqui, eu seria curioso.

Respondeu 06/10/2008 em 23:31
fonte usuário

votos
0

A partir da documentação em Django auth , se você quiser usar o modelo de usuário, é obrigatório ter um nome de usuário e senha, não há "contas anônimas". Eu acho que você poderia criar contas com uma senha padrão e, em seguida, dar a oportunidade para as pessoas para permitir uma conta "real" (por definição de uma senha em si).

Para configurar uma tabela "Pessoas" que une a tabela de usuário que você apenas tem que usar um campo ForeignKey (isso é realmente a maneira recomendada de adicionar informações adicionais para o modelo do usuário, e não herança)

Respondeu 05/10/2008 em 15:56
fonte usuário

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