初学者认证问题

时间:2010-08-18 22:28:38

标签: django

我有一个页面index.html,其中包含登录和注册表单。关于让它正常工作,我有几个问题

我的URLConfig看起来像这样:

urlpatterns = patterns('djangoproject1.authentication.views',
    (r'^$',direct_to_template,{'template':'authentication/index.html'}),
    (r'^register/$','register'),
)

1)使用Django书是一个指南,我的表格如下:

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

当然,由于该文件是index.html,因此当我转到该页面时,该表单不会出现。我是否需要一个“视图”来处理访问index.html而不是direct_to_template?

2)我的注册码如下所示:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/register/success/")
        else:
            form = UserCreationForm()
    return render_to_response("authentication/index.html", {'form': form})

这是django身份验证内置的东西。人们真的使用它吗?似乎有限。我知道我可以通过使用用户配置文件或其他东西向Django用户添加更多字段,但UserCreationForm呢?我应该滚动自己的表格吗?它应该以某种方式从UserCreationForm继承吗?

2 个答案:

答案 0 :(得分:0)

听起来你可能想要使用不同的通用视图而不是direct_to_tepmlate。看一下create object通用视图。我通常只是创建一个视图,通常我最终需要做的不仅仅是通用视图允许我轻松做的事情。

答案 1 :(得分:0)

direct_to_template本身既不能生成也不能处理表单 - 它只是直接向模板呈现请求,正如其名称所描述的那样。

您可以查看django-registration进行注册。

如果您在同一页面上放置两个表单,则需要一个能够呈现和处理这两个表单的自定义视图,尽管多表单页面非常难以正常使用。如果您有单独的表单(和提交按钮),则可以为每个提交输入添加唯一名称,并根据if name in request.POST确定要验证和处理的表单(类)。


修改

仔细查看您的代码后,我发现您的注册表单会重定向到不同的视图;这简化了事情,但您仍然需要一个自定义视图,用于将登录和注册表单传递给模板进行渲染。

或者,如果您只是重定向到处理每个表单的网页,则可以直接在urls.py中使用direct_to_template的{​​{1}}参数添加这些表单:

extra_context

这种方法并不是最干净的,但如果你 希望使用通用视图,那么这是一种选择。