2010-10-20 4 views
2

J'utilise django-socialregistration pour gérer la connexion de mon site avec Facebook. Lorsqu'un utilisateur clique sur le bouton "Se connecter avec Facebook", je suis capable de créer automatiquement un nouvel utilisateur Django et de le connecter. Cependant, j'ai aussi besoin de créer pour eux un enregistrement UserProfile (mon AUTH_PROFILE_MODULE) qui contient leur Informations sur le profil Facebook (email, nom, lieu). Je crois que je dois remplacer la vue "d'installation" de socialregistration afin que je puisse faire ce que j'ai besoin de faire avec UserProfile. J'ai ajouté ce qui suit au fichier urls.py de mon projet:Erreur lors de l'encapsulation de la vue d'une application Django tierce? (Facebook, django-socialregistration, profils-django)

url (r '^ sociale/setup/$', 'myapp.views.socialreg.pre_setup', name = 'socialregistration_setup'),

Mon point de vue personnalisé est ici "/myapp/views/socialreg.py" et ressemble à:

from socialregistration.forms import UserForm 

def pre_setup(request, template='socialregistration/setup.html', 
       form_class=UserForm, extra_context=dict()): 
    # will add UserProfile storage here... 
    return socialregistration.views.setup(request, template, form_class, extra_context) 

La signature de vue socialregistration Je prépondérants ressemble à ceci:

def setup(request, template='socialregistration/setup.html', 
      form_class=UserForm, extra_context=dict()): 
    ... 

Je reçois l'erreur "ViewDoesNotExist at/social/setup /: Impossible d'importer myapp.views.socialreg. Erreur: Aucun module nommé socialregistration.views « lorsque j'essaie la solution ci-dessus

L'application d'inscription sociale fonctionne correctement lorsque je ne tente pas de remplacer la vue, elle est donc probablement installée correctement dans les packages de site. Tout le monde sait ce que je fais mal?

+0

J'explore aussi en utilisant un décorateur au lieu de surcharger la vue de l'application basée sur cette réponse de SO: http://stackoverflow.com/questions/1649351/overriding-django-views-with-decorators – mitchf

+0

Cela ressemble énormément comme l'autre question que vous avez posée http://stackoverflow.com/questions/3982443/how-do-you-wrap-the-view-of-a-3rd-party-django-app. Pourtant, il n'y a rien de magique dans les vues - si le module n'est pas trouvé, ce n'est pas sur votre chemin python. – tback

+0

Problème simplifié. – mitchf

Répondre

2

OK, comme Tim a noté, ce problème était lié chemin.

image plus grande, la façon d'accomplir ce que je voulais (créer un UserProfile lié quand django-socialregistration crée un utilisateur) est mieux fait en passant un formulaire personnalisé dans la vue "setup" de socialregistration, comme l'auteur l'a suggéré ici: http://github.com/flashingpumpkin/django-socialregistration/issues/issue/36/#comment_482137

Intercept l'URL approprié dans votre fichier urls.py:

from myapp.forms import UserForm  
url('^social/setup/$', 'socialregistration.views.setup', 
    { 'form_class': UserForm }, name='socialregistration_setup'), 
(r'^social/', include('socialregistration.urls')), 

Vous pouvez baser votre propre UserForm hors UserForm de socialregistration, en ajoutant dans le code pour remplir et enregistrer le UserProfile.

+0

Notez que cela ne fonctionnera pas si vous avez SOCIALREGISTRATION_GENERATE_USERNAME = True –

Questions connexes