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 后端无法实现的方式从根本上自定义视图,那么只需创建一个 authn
或 users
应用程序并从 django-registration 导入您认为有用的任何位。例如,您可以将默认模型和管理器保留在 registration
应用命名空间中,但在新应用中将自定义后端连接到您自己的内部。
【讨论】:
如果我的要求不高,请您提供一个真实的例子。假设我想从我想要创建的视图中进行注册或登录表单,我将如何做到这一点?我不想自定义表单本身,我只想在它周围添加一些函数,这样当我的视图被调用时,我的函数将与注册表单或其他身份验证表单一起显示。谢谢! 当然可以。在这里,我删除了一个要点 (gist.github.com/819235),我将注册后端合并到基于类的视图中(一个更极端的示例)。每个注册过程的大部分通用内容都在RegistrationProfile
管理器上定义。您会注意到我正在使用 django-registration 中提供的模型和管理器,但我提供的是我自己的行为。后端的 API 相当灵活,因此您可以通过拦截信号并提供您的 class MyBackend(DefaultBackend):
来实现大多数事情,但这只是为了展示其他可能性。以上是关于django-registration 视图自定义的主要内容,如果未能解决你的问题,请参考以下文章
Django-Registration & Django-Profile,使用你自己的自定义表单