将用户注册添加到Django App

时间:2015-04-11 05:59:28

标签: python django django-authentication

我按照本教程完成了它:http://tutorial.djangogirls.org/en/django_forms/README.html

我想继续并在我登录按钮旁边添加一个注册按钮,但我无法让它工作。我尝试了action = "{% url blog.views.register %}",但我一直收到没有找到参数的错误。我会发布我的所有代码,但我几乎可以肯定它已经离开了基础。我遵循了这个想法:http://tea.cesaroliveira.net/archives/460但我无法让它正常工作。实施注册表的最佳方式是什么?有人可以给我一个例子或指南,即使只是一个简短的注释,我应该采取的方法来添加注册功能。我在login.html模板中添加了第二个表单,其中包含method=postaction = "{% 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已经内置了用户功能。

非常感谢任何帮助/建议。我只是想看看我的方法有什么问题,以及更好的方法。

1 个答案:

答案 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 :修正了注册的反向网址。

相关问题