【问题标题】:Django HTTP post to same URLDjango HTTP 发布到相同的 URL
【发布时间】:2014-01-16 12:21:36
【问题描述】:

当单击该页面中的按钮时,对同一页面执行 HTTP POST 的“正确”django 方式是什么?

我有一个 django 应用程序,其中包含一个带有两个不同按钮的页面。每个按钮执行不同的操作,但按钮按下的结果以 JSON 格式返回,然后用于更新页面上的 UI。

显然,我可以让每个按钮提交到它自己的视图并这样做。但我也可以让页面视图响应按钮按下并检测请求是否为 POST。

还有 JSON mixin 的东西 - 是否值得尝试以某种方式使用它?

我已经完成了所有工作 - 我只是想知道“正确”的方法是什么。

有什么想法吗?

【问题讨论】:

  • 单个 Django 视图函数可以处理多个 Form 对象。我通常只是做一个像if "form-1-submit-button" in request.POST: form = Form1(request.POST) else form = Form2(request.POST) 这样的开关,但我不确定这是否是最佳做法

标签: json django http post


【解决方案1】:

正如 Mikko Ohtamaa 所说,通常的做法是在您的视图中检查按下了哪个按钮。例如:

模板.html:

<form method="post" action="">
    {{ obj_form.as_p }}
    <button name="action1" value="1" type="submit">
    <button name="action2" value="1" type="submit">
</form>

views.py:

if 'action1' in self.request.POST:
    form = Action1Form(request.POST)
elif 'action2' in self.request.POST:
    form = Action2Form(request.POST)

当您拥有一个具有不同操作的 HTML 表单时,在一个视图中使用多个表单会更方便。如果您有单独的表单(或根本没有),我建议为每个操作使用单独的视图。

【讨论】:

  • 我实际上并没有使用表单——我只是在用户点击我拥有的两个按钮之一时从页面发布一些信息。那么您认为我应该为每个按钮操作使用单独的视图吗?您认为哪个是最合适的基于类的通用视图?是否值得考虑使用 JSON mixin?
  • 最佳选择取决于您需要什么样的处理。当您需要在多个视图中执行相同的操作时,可以使用 Mixins(如 the JSONMixin example 中所述)。如果您没有任何可重用的基于逻辑函数的视图,则完全可以处理简单的 AJAX 请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2016-11-09
  • 2017-07-27
  • 2016-12-15
  • 1970-01-01
  • 2022-01-19
  • 2021-01-17
相关资源
最近更新 更多