为什么Django要将我的表单重定向到表单的“action”指定的不同位置?

2024-06-30 17:01:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django的django.contrib.auth.forms模块,特别是UserCreationForm类。在

这是我表单的模板化版本,其中register_form是从{}传递的变量,该变量包含空的UserCreationForm

<form  id="registration" method="post" action="/register">
    {% csrf_token %}
    <table class="float_left">
        <tr><th><label for="id_username">Username:</label></th><td>{{  register_form.username }}</td></tr>
        <tr><th><label for="id_password1">Password:</label></th><td>{{  register_form.password1 }}</td></tr>
        <tr><th><label for="id_password2">Confirm Password:</label></th><td>{{  register_form.password2 }}</td></tr>
    </table>
    <input class="float_right button_input" type="submit" value="Register" />
</form>

它在页面上显示得很好。注意,操作被设置为"/register"。然而,当我点击提交按钮时,什么也没有发生。我打开Chrome曾经非常方便的JavaScript控制台,看到了以下输出(运行在Django的manage.pydev服务器上):

^{pr2}$

太棒了。注意,这里Django(或者其他东西,可能)已经将includes目录插入到我的路径中。在

以下是urls.py中的相关片段:

urlpatterns = patterns('',
    url(r'^register', 'authentication.views.register'),
)

views.py

def register(request):
# csrf is used to prevent Cross-Site Request Forgeries (i.e. XSS attacks, SQL injections, etc.)
c = {}
c.update(csrf(request))

# if logged in, redirect to personal profile
if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        new_user = form.save()
        return HttpResponseRedirect("/home")
else:
    c['register_form'] = UserCreationForm()
    return render_to_response('authentication/register.html', c, context_instance=RequestContext(request))

如果表单是有效的(在将新用户保存到数据库中之后),只需一个非常简单的重定向到/home,否则返回到同一页面(authentication /register.html是相关的模板)。在

我很困惑。在

提前谢谢你能告诉我的一切。在

编辑:我应该注意,我已经使用http://localhost:8000/作为我正在开发的Django应用程序的域。事实上,当我使用UserCreationForm的内置as_table()方法打印时,这个表单似乎也运行得很好。但是它看起来很糟糕,所以我切换到手动格式化表单,现在它不起作用了。我没有调整过<form>标记一次。在我开始自动印刷之前,我还得供应。在

主要编辑:

没关系,伙计们,我明白了。原来页面中有一些遗留代码,在我开始将其转换为Django之前,它试图调用一些用于表单验证的旧php,这正是我一直在做的。谢谢你的评论,但我要结束这个问题。在


Tags: djangoformregisterid表单forrequesttable
1条回答
网友
1楼 · 发布于 2024-06-30 17:01:24

除非您明确设置了它,否则Django的devserver将在127.0.0.1:8000上为您的页面提供服务。在

从您的POST URL,我只能猜测您有一些PHP应用程序配置为在http://localhost:8000上提供服务,可能是通过Apache提供的。在

相关问题 更多 >