我按照本教程完成了它:http://tutorial.djangogirls.org/en/django_forms/README.html
我想继续并在我登录按钮旁边添加一个注册按钮,但我无法让它工作。我尝试了action = "{% url blog.views.register %}"
,但我一直收到没有找到参数的错误。我会发布我的所有代码,但我几乎可以肯定它已经离开了基础。我遵循了这个想法:http://tea.cesaroliveira.net/archives/460但我无法让它正常工作。实施注册表的最佳方式是什么?有人可以给我一个例子或指南,即使只是一个简短的注释,我应该采取的方法来添加注册功能。我在login.html模板中添加了第二个表单,其中包含method=post
和action = "{% url blog.views.register %}"
以及另一个用于注册的模板,register.html
在blog / views.py
中def register(request):
if request.method == "POST":
form = UserCreateForm(request.POST, instance=post)
return render(request, 'blog/register.html)
和forms.py
from django import forms
from .models import Post
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ( "username", "email" )\
并在blog / urls.py
中from django.conf.urls import patterns, include, url
from django.contrib import admin
from blog import views
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),
url(r'', include('blog.urls')),
url(r'^accounts/register/$', views.register , {'next_page': '/'}),
)
至于验证,我可以稍后担心,我只是想让它工作,以便他们可以点击注册并打开一个注册模板与表格填写。我不确定这是否需要新模型,因为django已经内置了用户功能。
非常感谢任何帮助/建议。我只是想看看我的方法有什么问题,以及更好的方法。
答案 0 :(得分:2)
好的,从顶部开始,这很可能是您的代码可能崩溃的第一个原因,这个{% url blog.views.register %}
是错误的。根据{{3}}上的Django文档:
要执行URL反转,您需要使用命名的URL模式。
因此,要为注册视图创建反向URL,您的urlpattern应如下所示:
urlpatterns = patterns('',
url(r'^accounts/register/$', views.register , name="register"),
)
我取出了“下一个”项目,因为您可以从视图中重定向。在模板中,您输入:
{% url 'blog:register' %}
,左手参数是app名称,右手arg是url模式的名称。
其次,我不确定你是如何处理登录表单的,但是寄存器视图期望一个不存在的实例。当您更新现有对象时,将使用实例。对于您的注册,这不是正在发生的事情,因此它不需要在那里。
def register(request):
if request.method == "POST":
form = UserCreateForm(request.POST) # filled form/i'm skipping validation for this example
return HttpResponseRedirect('/') # go to some other page if successfully saved
else:
form = UserCreateForm # if the user accessed the register url directly, just display the empty form
return render(request, 'blog/register.html', {'form': form})
但最终,我强烈建议reverse urls用户注册/个人资料。
UPDATE :修正了注册的反向网址。