你好,在我的登录网站我有一个表单,在提交时发送一个POST请求。
在我看来,这就是我处理表单POST请求的方式
def SignUp(request):
if request.method == 'POST':
stuff goes here
else:
form = SignUpForm()
return render(request, "index.html", {"form": form})
字符串
现在在我的JavaScript中,我想添加另一个POST请求,它将检查当前用户名是否已经被占用。我做了它,并将POST发送到我的当前视图,在那里这两个POST请求将与表单POST请求一起沿着处理。最终发生的是SignUp()继续处理这两个POST请求。我如何在一个视图中处理两个POST请求?有没有更好的方法来做这一切?(我宁愿留在这个网址)
我试着阅读任何区分POST请求的方法,但什么也没找到。(我几天前才开始学习Django,我完全迷失了方向。)
4条答案
按热度按时间ax6ht2ek1#
您需要使用另一个路由。URI用于为处理功能的端点创建分层地址。由于您希望使用另一个POST,因此需要有另一个路由供其转到。下面是用于数据和用户的Web API的路由结构(restful)的示例。
处理数据动作
字符串
型
处理用户操作
的字符串
请注意,在每个endoint上处理的HTTP动词(GET、PUT、POST、POST)不同,但在一个端点上不会处理两次。
我认为Flask是一个更好的地方来开始这些概念。
flvlnr442#
最常见的方法是为每个POST请求使用不同的URL路径。这意味着有一个URL用于注册表单提交,另一个URL用于用户名可用性检查。(我建议使用开发人员工具->网络选项卡检查类似的Web应用程序行为,当他们做类似的事情时)
最佳实践和推荐方法:为
username_check
使用不同的URL:在urls.py
字符串
在views.py
型
如果您仍然想在同一个URL中执行此操作,这不是最佳做法,但可以通过检查请求.POST内容来实现。例如,如果用户名检查仅发送用户名,而注册发送其他字段,如电子邮件和密码,则可以执行以下操作:
型
最后,我建议研究一下如何实现API视图、REST结构和Django Rest Framework,作为这类“背景”功能的学习路径。
ulydmbyx3#
如果你需要知道一个用户名是否已经被使用,你可以简单地用你的表单的overriding clean方法来做:
字符串
检查此> https://docs.djangoproject.com/en/4.2/ref/forms/validation/
顺便说一句,让你的字段保持独特的最好方法是把
unique=True
放在你的模型字段中。nzrxty8p4#
您可以简单地在负载中设置额外的参数来区分post请求。
例如,在您的views.py中,您可以设置一个附加参数signup作为您的有效负载的一部分:
字符串
在你的模板中,确保添加
signup
作为表单的一个属性,在本例中默认值为normal
。在你对视图进行的任何JavaScript post调用中也包括它。然后你可以在你的视图中实现任何其他if条件。