gpt4 book ai didi

python - 使用 django-registration 形式而不是自己的

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:18 52 4
gpt4 key购买 nike

所以我使用django-registration进行电子邮件激活等。我定义了我的表单并正确调用它,但由于某种原因它使用 django-registration 的基本表单而不是我自己的表单。我完全不知道为什么会发生这种情况,有什么想法吗?

View .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'),

表单.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 %}

最佳答案

由于 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.urls')) 的网址, 与您的 /accounts/register/ 网址相匹配首先,不要访问您的 views.register View 。因此,要改变这一点,您需要更改顺序,以便 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')),
...
]

关于python - 使用 django-registration 形式而不是自己的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39757258/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com