django-registration 视图自定义

Posted

技术标签:

【中文标题】django-registration 视图自定义【英文标题】:django-registration view customization 【发布时间】:2011-06-23 21:26:05 【问题描述】:

我在我的一个项目中使用django-registration(参见:https://bitbucket.org/ubernostrum/django-registration)。 django-registration 的标准设置是在urls.py 文件中添加以下代码

(r'^accounts/', include('registration.urls'))

还可以自定义名为 registration 的文件夹中的模板。

上面的代码正在创建指向注册、登录和密码恢复的链接,这很好。但是在我的项目中,我通常会添加一些其他功能到我的视图中,所以如果我只添加include('registration.urls'),我似乎无法自定义包含这些 django 注册表单的视图。

有没有办法在视图中调用 django-registration 使用的表单,以便我可以在这些视图上添加更多内容?

【问题讨论】:

如果我说得对,你想自定义注册表单,如果是这样,只需从应用程序的存储库中复制代码并在模块中进行必要的更改......如果不符合要求,请回复。 我不需要自定义表单,我只需要将它们带到我想要创建的视图中。例如,当我显示注册表单时,我还想添加一个自定义函数(在同一视图中),该函数将执行某种类型的跟踪。 【参考方案1】:

注册表单由注册后台提供。查看registration.backends.default.DefaultBackend

有一个方法 get_form_class(request) 返回 registration.forms.RegistrationForm 类。您所要做的就是创建一个新的后端,从DefaultBackend 继承并覆盖get_form_class() 方法以返回一个新的表单类。

您几乎可以通过提供自定义后端来做任何事情,除了更改注册应用程序的基本行为。如果您需要以提供 custm 后端无法实现的方式从根本上自定义视图,那么只需创建一个 authnusers 应用程序并从 django-registration 导入您认为有用的任何位。例如,您可以将默认模型和管理器保留在 registration 应用命名空间中,但在新应用中将自定义后端连接到您自己的内部。

【讨论】:

如果我的要求不高,请您提供一个真实的例子。假设我想从我想要创建的视图中进行注册或登录表单,我将如何做到这一点?我不想自定义表单本身,我只想在它周围添加一些函数,这样当我的视图被调用时,我的函数将与注册表单或其他身份验证表单一起显示。谢谢! 当然可以。在这里,我删除了一个要点 (gist.github.com/819235),我将注册后端合并到基于类的视图中(一个更极端的示例)。每个注册过程的大部分通用内容都在RegistrationProfile 管理器上定义。您会注意到我正在使用 django-registration 中提供的模型和管理器,但我提供的是我自己的行为。后端的 API 相当灵活,因此您可以通过拦截信号并提供您的 class MyBackend(DefaultBackend): 来实现大多数事情,但这只是为了展示其他可能性。

以上是关于django-registration 视图自定义的主要内容,如果未能解决你的问题,请参考以下文章

Django-Registration & Django-Profile,使用你自己的自定义表单

Django 1.6 和 django-registration:内置身份验证视图未拾取

Django 自定义用户电子邮件帐户验证

Django-Registration:电子邮件作为用户名

包含 django-registration 的 url

django-registration 与 paypal 集成