首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django注册中使用不同的表单

如何在Django注册中使用不同的表单
EN

Stack Overflow用户
提问于 2011-06-21 01:14:19
回答 5查看 6.4K关注 0票数 8

Django-注册在forms.py文件中有几个表单类。一个是“RegistrationFormTermsOfService(RegistrationForm)类..

我该怎么修改其余的Django注册码,才能在我的注册流中启用这个表单,而不是RegistrationForm?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-21 02:42:10

您可以简单地进入您的urls.py并通过执行如下操作来覆盖form类:

代码语言:javascript
复制
from registration.forms import RegistrationFormTermsOfService

(r'^accounts/register/$', 'registration.views.register', {'form_class' : RegistrationFormTermsOfService}),
票数 5
EN

Stack Overflow用户

发布于 2013-05-31 00:44:09

更新接受的答案以符合Django 1.5和最新版本的django注册:

在urls.py中:

代码语言:javascript
复制
from registration.forms import RegistrationFormTermsOfService
from registration.backends.default.views import RegistrationView

urlpatterns = patterns('',
    url(r'^accounts/register/$', RegistrationView.as_view(form_class=RegistrationFormTermsOfService), name='registration_register'),
    # your other URLconf stuff follows ...
)

然后更新registration_form.html模板并添加一个tos字段,例如:

代码语言:javascript
复制
<p>
<label for="id_tos">I accept the terms of service</label>
{% if form.tos.errors %}
    <p class="errors">{{ form.tos.errors.as_text }}</p>
{% endif %}
{{ form.tos }}
</p>
票数 13
EN

Stack Overflow用户

发布于 2011-06-21 01:55:55

这是一个使用自定义表单和后端的实际示例,它设置用户名==电子邮件地址,并且只在注册时提示用户输入电子邮件地址。In,例如my_registration.py

代码语言:javascript
复制
from django.conf import settings
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site

from registration import signals
from registration.forms import RegistrationForm
from registration.models import RegistrationProfile
from registration.backends.default import DefaultBackend

class EmailRegistrationForm(RegistrationForm):
    def __init__(self, *args, **kwargs):
        super(EmailRegistrationForm,self).__init__(*args, **kwargs)
        del self.fields['username']

    def clean(self):
        cleaned_data = super(EmailRegistrationForm,self).clean()
        if 'email' in self.cleaned_data:
            cleaned_data['username'] = self.cleaned_data['username'] = self.cleaned_data['email']
        return cleaned_data


class EmailBackend(DefaultBackend):
    def get_form_class(self, request):
        return EmailRegistrationForm

my_registration_urls.py

代码语言:javascript
复制
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

from registration.views import activate
from registration.views import register

urlpatterns = patterns('',
                   url(r'^activate/complete/$',
                       direct_to_template,
                       { 'template': 'registration/activation_complete.html' },
                       name='registration_activation_complete'),
                   # Activation keys get matched by \w+ instead of the more specific
                   # [a-fA-F0-9]{40} because a bad activation key should still get to the view;
                   # that way it can return a sensible "invalid key" message instead of a
                   # confusing 404.
                   url(r'^activate/(?P<activation_key>\w+)/$',
                       activate,
                       { 'backend': 'my_registration.EmailBackend' },
                       name='registration_activate'),
                   url(r'^register/$',
                       register,
                       { 'backend': 'my_registration.EmailBackend' },
                       name='registration_register'),
                   url(r'^register/complete/$',
                       direct_to_template,
                       { 'template': 'registration/registration_complete.html' },
                       name='registration_complete'),
                   url(r'^register/closed/$',
                       direct_to_template,
                       { 'template': 'registration/registration_closed.html' },
                       name='registration_disallowed'),
                   (r'', include('registration.auth_urls')),
                   )

然后在你的核心urls.py中,确保你包括:

代码语言:javascript
复制
url(r'^accounts/', include('my_registration_urls')),
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6414926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档