Tout ce dont vous avez besoin est de remplacer social.pipeline.user.get_username
par SOCIAL_AUTH_PIPELINE avec le chemin d'accès à votre propre fonction renvoyant le nom d'utilisateur généré.
Par exemple:
projet/myapp/settings.py
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'project.myapp.utils.get_username',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
)
projet/myapp/utils.py:
from social.pipeline.user import get_username as social_get_username
from random import randrange
def get_username(strategy, details, user=None, *args, **kwargs):
result = social_get_username(strategy, details, user=user, *args, **kwargs)
result['username'] = '-'.join([
result['username'], strategy.backend.name, str(randrange(0, 1000))
])
return result
En fonction ci-dessus, je suis appelant la méthode par défaut get_username
du module python-social-auth
et d'obtenir le résultat Nom d'utilisateur et nombre aléatoire entre 0 et 1000.
Vous pouvez vérifier le code source de social.pipeline.user.get_username on GitHub.
Il y avait un problème avec plageAleatoire là, une exception: exception élément de séquence 2: chaîne attendue ou Unicode, int trouvé , mais je l'ai fixé et maintenant il fonctionne, je peux contrôler totalement la génération nom d'utilisateur. Agréable. – Orca
Ahh, mon erreur, j'ai oublié de convertir int en str. Code mis à jour. – daniula
Incroyable. Merci ça m'a beaucoup aidé !! –