Comment faire pour modifier la valeur par défaut de django Utilisateur modèle pour l'adapter à mes besoins?
La valeur par défaut de Django reinhardt, User
modèle a certains champs, et les règles de validation, que je n'ai pas vraiment besoin. Je veux faire de l'enregistrement d'aussi simple que possible, c'est à dire exiger e-mail ou nom d'utilisateur ou votre numéro de téléphone - tous ceux étant unique, donc bon que des identifiants d'utilisateur.
Je n'aime pas le jeu de caractères par défaut pour le nom d'utilisateur qui est validé dans Django modèle utilisateur. J'aimerais permettre à n'importe quel caractère il - pourquoi pas?
J'ai utilisé de l'utilisateur-profil d'application django avant d'ajouter un profil pour l'utilisateur, mais cette fois, je préfère faire la classe mimimal. Mais j'ai encore envie d'utiliser le User
classe, comme il me donne un moyen facile d'avoir des parties de site restreint uniquement pour les utilisateurs connectés.
Comment dois-je faire?
OriginalL'auteur kender | 2009-05-22
Vous devez vous connecter pour publier un commentaire.
Plutôt que de modifier la classe d'Utilisateur directement, ou sous-classement, vous pouvez aussi réutiliser les champs existants.
Sur un site, j'ai utilisé le "prenom" champ du public "nom affiché" d'un utilisateur et les trucs un slugified version de la dans le "nom d'utilisateur" (pour utiliser dans les Url). J'ai écrit une coutume auth backend pour permettre aux gens de se connecter en utilisant leur "nom public" ou leur adresse e-mail, et je assurer l'unicité de ces deux à l'inscription. Cela joue bien avec d'autres applications réutilisables et ne pas introduire davantage de tables ou requêtes.
Pour un autre site que je ne voulais pas les noms d'utilisateur à tous, tout à fait unique e-mails. Afin de satisfaire Django besoin d'un nom d'utilisateur unique, j'ai juste hachées à l'adresse e-mail et utilisé que comme le nom d'utilisateur (vous devez en base64 encode la valeur de hachage pour le presser de moins de 30 caractères). Personnalisé auth backend pour autoriser la connexion avec le courrier électronique.
Si la compatibilité ascendante n'est pas un problème, il y a beaucoup d'améliorations que j'aimerais voir dans django.contrib.auth et le modèle de l'Utilisateur pour les rendre plus souples. Mais il y a beaucoup de choses que vous pouvez faire à l'intérieur de contraintes avec un peu de créativité.
Découvrez cet extrait de code pour commencer: djangosnippets.org/snippets/74 assurez-vous de lire les commentaires, comme le code dans le 2ème commentaire est mieux que dans l'extrait de code, et beaucoup d'autres questions pertinentes sont soulevées dans les observations que vous aurez envie de garder à l'esprit.
OriginalL'auteur Carl Meyer
J'ai mal lu la question. Espérons que ce post est utile à quelqu'un d'autre.
Cela permettra de créer un profil utilisateur chaque fois qu'un utilisateur est enregistré si elle est créée.
Vous pouvez ensuite utiliser
Voici quelques infos de la doc
http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
OriginalL'auteur Raisins
Le Django d'Utilisateur modèle est structuré très judicieusement. Vous ne voulez vraiment pas à permettre à l'arbitraire de caractères dans un nom d'utilisateur, par exemple, et il existe des moyens pour atteindre adresse email de connexion, sans le piratage des changements au modèle de base.
Simplement de stocker des informations supplémentaires, autour d'un compte d'utilisateur, Django prend en charge la notion de profil d'utilisateur. Alors que vous n'avez pas besoin de compter sur le support intégré pour gérer cela, c'est une convention qui est souvent suivis et il vous permettra de jouer gentil avec les réutilisable Django applications qui sont autour de flotter dans l'éther. Pour plus d'informations, voir ici.
Si vous souhaitez modifier l'Utilisateur de base du modèle, mais aussi "jouer bien" avec réutilisables applications qui reposent sur elle, on l'ouvre un peu la Boîte de Pandore. Les développeurs de faire des hypothèses de base sur la façon dont la bibliothèque de base est structurée, de sorte que tout changement peut provoquer inattendu de la rupture. Néanmoins, vous pouvez monkeypatch changements au modèle de base, ou de la succursale d'une copie de Django localement. Je ne conseille pas le dernier, et que recommander l'ancienne si vous savez ce que vous faites.
Je serai d'accord qu'un plus pluggable authentification système serait souhaitable
OriginalL'auteur Daniel Naab
Vous faites face à un peu d'un dilemme qui a vraiment deux solutions si vous êtes déterminé à éviter le profil de personnalisation basée sur l'a déjà souligné.
User
modèle lui-même, par Daniel suggestions deCustomUser
classe, sous-classementUser
ou la copie de ses fonctionnalités.La dernière proposition signifie que vous auriez à mettre en œuvre certaines des choses que
User
fait automatiquement ou manuellement, mais je me demande si c'est aussi mauvais que cela puisse paraître, surtout si vous êtes au début de votre projet. Tout ce que vous avez à faire est de réécrire un middle-ware classe et certains décorateurs.Bien sûr, je ne pense pas que cela vous permet d'acheter tout ce qui 1 ne sera pas vous, sauf que votre projet ne devrait pas se briser si vous
svn update
votre django. Il peut éviter certains des problèmes de compatibilité avec d'autres applications, mais ma conjecture est que la plupart des problèmes existent.OriginalL'auteur David Berger
Il y a un certain nombre de façons de le faire, mais voici ce que je ferais: j'aimerais permettre à un utilisateur d'entrer un e-mail, nom d'utilisateur (qui doit contenir au moins une lettre et pas de
@
symboles) ou de numéro de téléphone mobile. Puis, quand j'ai valider:@
. Si oui, définir comme l'email de l'utilisateur, de hachage de manière appropriée et de le définir comme leur nom d'utilisateur.+
. Ensuite, la bande les caractères appropriés et de les stocker à la fois comme numéro de téléphone et nom d'utilisateur (si vous enregistrez le numéro de téléphone mobile dans un autre modèle pour l'envoi de SMS à des fins ou de quelque chose).Je voudrais aussi valider l'utilisateur/téléphone/e-mail champ de la même façon lors de la connexion, et regardez à l'endroit approprié, de sorte que si, par exemple, un utilisateur se connecte avec leur numéro de mobile puis de modifier leur nom d'utilisateur (pour d'autres raisons), ils peuvent toujours se connecter avec leur numéro de mobile.
OriginalL'auteur Adam Brenecki