我相对于 Django 和 Python 来说比较新,最近几天一直在尝试弄清楚如何通过 Django 表单发送 PUT 和 DELETE 请求。
我找到了这些话题: https://baxeico.wordpress.com/2014/06/25/put-and-delete-http-requests-with-django-and-jquery/
Sending a DELETE request from a form in Django
但是,这些话题解决这个问题的方式对我来说似乎并不容易。所以问题是 - 是否有任何简单的方法可以通过 Django 表单发送 PUT 和 DELETE 请求。
目前我有这个:
views.py
class AllRoutes(View):
model = Schedule
template_name = 'trains_schedule/all_routes.html'
def get(self,request,train_id=None):
if train_id:
train = Schedule.objects.get(pk=int(train_id))
context = {'train':train}
else:
context = {'schedule_list':Schedule.objects.all()}
return render(request,'trains_schedule/all_routes.html',context)
def delete(self,request,train_id=None):
route = get_object_or_404(Schedule, pk=train_id)
response = u'Successful delete route {}'.format(route.display_name())
route.delete()
return HttpResponse(response)
urls.py
urlpatterns = [
url(r'^trains/(?P<train_id>[0-9]+)?$', views.AllRoutes.as_view(), name='trains')]
所有路线.html
{% if schedule_list %}
<h3>{{ "List of all train routes" }}</h3>
<ul>
{% for train_route in schedule_list %}
<li><a href="{% url 'trains' train_route.id %}">{{ train_route.display_name }}</a></li>
{% endfor %}
</ul>
{% else %}
<p></p>
{% endif %}
{% if train %}
<h1>{{ train.train }}</h1>
<h3>{{ "Route info" }}</h3>
{{ train.display_train }}
<h3>{{ "Train info" }}</h3>
{{train.display_train_info}}
<form method="delete">
{% csrf_token %}
<input type="submit" value="Delete" />
</form>
{% else %}
<p></p>
{% endif %}
现在它的工作方式如下:
- /trains/ 显示所有火车路线的列表,并提供每条路线的链接
- /trains/12 - get() 在 views.py 中获取路线 id 并显示有关该路线的信息
当我按下“删除”时,希望视图接收到 DELETE 请求。
最终我这样做:
<form method="post">
{% csrf_token %}
<input id="action_id" type="hidden" name="action" value="Delete">
<input type="submit" value="Delete" />
</form>
在views.py中,我添加了对于action_id =="Delete"的POST请求的处理。
但是我想要真正的DELETE和PUT请求,而不是解析POST请求以理解我需要做什么 - 删除或更改路由或添加新路由。
我明白我需要更改这部分内容:
<form method="delete">
{% csrf_token %}
<input type="submit" value="Delete" />
</form>
但是我不知道如何做到。