我有一个页面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继承吗?
答案 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
这种方法并不是最干净的,但如果你 希望使用通用视图,那么这是一种选择。