包装第 3 方 Django 应用程序的视图时出错? (Facebook、django-socialregistration、django-profiles)

Posted

技术标签:

【中文标题】包装第 3 方 Django 应用程序的视图时出错? (Facebook、django-socialregistration、django-profiles)【英文标题】:Error when wrapping the view of a 3rd-party Django app? (Facebook, django-socialregistration, django-profiles) 【发布时间】:2010-10-20 19:04:53 【问题描述】:

我正在使用 django-socialregistration 来管理我的网站与 Facebook 的连接。

当用户单击“与 Facebook 连接”按钮时,我能够自动创建一个新的 Django 用户并让他们登录。但是,我还需要为他们创建一个包含他们 Facebook 的 UserProfile(我的 AUTH_PROFILE_MODULE)记录个人资料信息(电子邮件、姓名、位置)。

我认为我需要覆盖 socialregistration 的“设置”视图,以便我可以使用 UserProfile 执行我需要执行的操作。我在项目的 urls.py 文件中添加了以下内容:

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

我的自定义视图在这里“/myapp/views/socialreg.py”,看起来像:

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)

我覆盖的社会注册视图签名如下所示:

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

当我尝试上述解决方案时,我收到错误“ViewDoesNotExist at /social/setup/:无法导入 myapp.views.socialreg。错误是:没有名为 socialregistration.views 的模块” .

当我不尝试覆盖视图时,socialregistration 应用程序运行良好,因此它可能已正确安装在站点包中。有谁知道我做错了什么?

【问题讨论】:

我也在探索使用装饰器,而不是根据这个 SO 响应覆盖应用程序的视图:***.com/questions/1649351/… 这看起来很像你问的另一个问题 ***.com/questions/3982443/… 。然而,视图并没有什么神奇之处——如果找不到模块,它就不会在你的 python 路径中。 【参考方案1】:

好的,正如 Tim 所说,这个特殊的问题与路径有关。

更大的图景,完成我想要的方法(在 django-socialregistration 创建用户时创建链接的 UserProfile)最好通过将自定义表单传递到 socialregistration 的“设置”视图来完成,正如作者在此建议的那样:@987654321 @

在你的 urls.py 文件中截取合适的 url:

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

您可以将您的用户表单基于 socialregistration 自己的用户表单,添加代码以填充和保存用户配置文件。

【讨论】:

请注意,如果您有 SOCIALREGISTRATION_GENERATE_USERNAME = True,这将无法开箱即用

以上是关于包装第 3 方 Django 应用程序的视图时出错? (Facebook、django-socialregistration、django-profiles)的主要内容,如果未能解决你的问题,请参考以下文章

Django:在一个视图中有超过 3 个模型时出错

在 Eclipse 中使用 aar - 为啥第 3 方活动在构建时解决而不是运行时解决?

Django 应用 + 第 3 方的模板目录

Django ORM - 检索数据时出错 -

从 Django Rest Framework SIMPLE JWT 令牌(第 3 方)获取中间件中的用户名

Basic Django - 视图包装器如何接收请求、关键字和位置参数?