Python 使用django登记表而不是自己的

Python 使用django登记表而不是自己的,python,django,forms,django-registration,Python,Django,Forms,Django Registration,因此,我使用django注册来激活电子邮件等。我定义了我的表单并正确地调用了它,但是出于某种原因,它使用了django注册中的基本表单,而不是我自己的表单。我完全不知道为什么会这样,有什么想法吗 views.py from django.shortcuts import render, render_to_response from django.http import HttpResponseRedirect from django.template.context_processors im

因此,我使用
django注册
来激活电子邮件等。我定义了我的表单并正确地调用了它,但是出于某种原因,它使用了django注册中的基本表单,而不是我自己的表单。我完全不知道为什么会这样,有什么想法吗

views.py

from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect
from django.template.context_processors import csrf
from django.contrib.auth.models import User
from .forms import UserForm


def register(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/register/complete')

    else:
        form = UserForm()
        token = {}
        token.update(csrf(request))
        token['form'] = form

    return render('registration/registration_form.html', token)

def registration_complete(request):
    return render('registration/registration_complete.html')
url.py

from django.conf.urls import include, url
from django.contrib import admin
from main import views

urlpatterns = [

    # Registration URLs
    url(r'^accounts/', include('registration.backends.hmac.urls')),
    url(r'^accounts/register/$', views.register, name='register'),
    url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'),

    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index, name='index'),
    url(r'^contact/$', views.contact, name='contact'),
    url(r'^login/$', views.login, name='login'),
    url(r'^register/$', views.register, name='register'),
    url(r'^profile/$', views.profile, name='profile'),
    url(r'^blog/$', views.blog, name='blog'),
forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.utils.translation import gettext as _
from registration.forms import RegistrationFormUniqueEmail, RegistrationForm

class UserForm(UserCreationForm):

    email = forms.EmailField(required=True)
    first_name = forms.CharField(label=_("Firstname"), required=False)
    last_name = forms.CharField(label=_("Lastname"),  required=False)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')

    def save(self, commit=True):
        user = super(UserForm, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user
模板

{% extends "base.html" %}
{% block title %}Register{% endblock %}
{% block content %}

  <h2>Registration</h2>

  <form action="/accounts/register/" method="post">{% csrf_token %}
    {{ form.as_p }}
  <input type="submit" value="Register" />

  </form>

{% endblock %}
{%extends“base.html”%}
{%block title%}寄存器{%endblock%}
{%block content%}
登记处
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}

因为
urlpatterns
的顺序是:

url(r'^accounts/', include('registration.backends.hmac.urls')),
url(r'^accounts/register/$', views.register, name='register'),
url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'),
Url(r'^accounts/”,include('registration.backends.hmac.Url'))中的Url,
首先匹配您的
/accounts/register/
Url,而不要访问
视图。注册
视图。所以,要改变这一点,您需要改变顺序,这样url模式就可以

urlpatterns = [
    url(r'^accounts/register/$', views.register, name='register'),
    url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'),
    url(r'^accounts/', include('registration.backends.hmac.urls')),
    ...
    ]

您需要子类化
UserForm(RegistrationForm):
not
UserForm(UserCreationForm):
我也认为是这样,但它没有改变任何东西。您期望什么?哪些字段?这些字段是不相关的,我可以将这些字段添加到
django registration
forms.py
中,如果我确实需要的话,可以通过这种方式获得所需的效果。这里更大的问题是,出于某种原因,应用程序根本没有使用我的表单,而是自动使用
django注册的
forms.py
,即使我告诉它使用我的表单。你怎么知道的?期望的输出是什么?您得到了什么?