Python 放入并删除Django
我对django和python还比较陌生,现在有几天我在尝试如何通过django表单发送PUT和DELETE请求 我发现以下主题: 但是这个话题解决这个问题的方式对我来说并不容易。所以问题是-有没有简单的方法通过Django中的表单发送PUT和DELETE请求 现在我有这个: views.pyPython 放入并删除Django,python,django,Python,Django,我对django和python还比较陌生,现在有几天我在尝试如何通过django表单发送PUT和DELETE请求 我发现以下主题: 但是这个话题解决这个问题的方式对我来说并不容易。所以问题是-有没有简单的方法通过Django中的表单发送PUT和DELETE请求 现在我有这个: views.py class AllRoutes(View): model = Schedule template_name = 'trains_schedule/all_routes.html' def get(
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)
url.py
urlpatterns = [
url(r'^trains/(?P<train_id>[0-9]+)?$', views.AllRoutes.as_view(), name='trains')]
urlpatterns=[
url(r'^trains/(?P[0-9]+)?$,views.AllRoutes.as_view(),name='trains')]
all_routes.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 %}
{%if schedule\u list%}
{{“所有列车路线列表”}
{时刻表列表%中列车路线的百分比}
{%endfor%}
{%else%}
{%endif%}
{%if火车%}
{{train.train}
{{“路由信息”}
{{train.display_train}
{{“列车信息”}
{{train.display{train\u info}
{%csrf_令牌%}
{%else%}
{%endif%}
现在它是这样工作的:
<form method="post">
{% csrf_token %}
<input id="action_id" type="hidden" name="action" value="Delete">
<input type="submit" value="Delete" />
</form>
- /列车/显示所有列车路线的列表,并提供每个路线的链接
- /trains/12-get()在views.py中获取路线id并显示有关此路线的信息
<form method="post">
{% csrf_token %}
<input id="action_id" type="hidden" name="action" value="Delete">
<input type="submit" value="Delete" />
</form>
{%csrf_令牌%}
在views.py中,我使用action_id==“Delete”添加post请求的处理
但我想提出真正的删除和放置请求,而不是解析POST请求来理解我需要做的事情——删除或更改路由或添加新路由
我理解我需要更改此部分:
<form method="delete">
{% csrf_token %}
<input type="submit" value="Delete" />
</form>
{%csrf_令牌%}
但是我不知道怎么做。根据,表单的有效方法是GET
和POST
。所以你不能这样做。
但是,Django正确处理“PUT”和“DELETE”(以及所有其他)http方法
from django.views.generic import View
class TestView(View):
http_method_names = ['get', 'post', 'put', 'delete']
def put(self, *args, **kwargs):
print "Hello, i'm %s!" % self.request.method
def delete(self, *args, **kwargs):
print "Hello, i'm %s!" % self.request.method
Hello, i'm PUT!
[06/Apr/2016 23:44:51] "PUT /de/teacher/test/ HTTP/1.1"
Hello, i'm DELETE!
[06/Apr/2016 23:57:15] "DELETE /de/teacher/test/ HTTP/1.1"
您可以使用ajax进行PUT和DELETE http调用。
如果您需要使用it表单,您可以做一些变通:
<form action="{% url 'teacher:test' %}" method="post">
{% csrf_token %}
<input type="hidden" name="_method" value="delete">
<input type="submit" value="Delete">
</form>
class TestView(View):
http_method_names = ['get', 'post', 'put', 'delete']
def dispatch(self, *args, **kwargs):
method = self.request.POST.get('_method', '').lower()
if method == 'put':
return self.put(*args, **kwargs)
if method == 'delete':
return self.delete(*args, **kwargs)
return super(TestView, self).dispatch(*args, **kwargs)
def put(self, *args, **kwargs):
print "Hello, i'm %s!" % self.request.POST.get('_method')
def delete(self, *args, **kwargs):
print "Hello, i'm %s!" % self.request.POST.get('_method')
Hello, i'm delete!
[07/Apr/2016 00:10:53] "POST /de/teacher/test/ HTTP/1.1"
Hello, i'm put!
[07/Apr/2016 00:10:31] "POST /de/teacher/test/ HTTP/1.1"
{%csrf_令牌%}
类TestView(视图):
http_method_names=['get','post','put','delete']
def调度(自身、*args、**kwargs):
method=self.request.POST.get(''方法','').lower()
如果方法=='put':
返回self.put(*args,**kwargs)
如果方法==“删除”:
返回self.delete(*args,**kwargs)
返回super(TestView,self).dispatch(*args,**kwargs)
def put(自身、*args、**kwargs):
打印“你好,我是%s!”%self.request.POST.get(“\u方法”)
def删除(self、*args、**kwargs):
打印“你好,我是%s!”%self.request.POST.get(“\u方法”)
你好,我是删除!
[07/Apr/2016 00:10:53]“POST/de/teacher/test/HTTP/1.1”
你好,我被放了!
[07/Apr/2016 00:10:31]“POST/de/teacher/test/HTTP/1.1”
它不是真正的
PUT
,但是您可以对表单和ajax/api调用使用相同的接口。您是在问如何在Django中正确地进行删除或编辑,还是要实现正确的rest接口?答案与rest接口不同,最好使用第三方软件包。我只想知道,这是从前端发送PUT和DELETE请求的最简单方法。我读过关于REST framwork的文章-了解很多,但同样的问题-不了解如何从前端发送PUT和DELETE请求。听起来好像你读到使用PUT和DELETE来更改和删除数据,但除非你正在开发API,否则你可以使用正确的Django方法来创建编辑和删除视图。所以,我要解释的是,我是在面试实习生开发人员的职位,我的任务之一是-制作django服务,结果-我应该以REST方式创建应用程序,但在前端,我应该使用纯HTML,但我不知道如何发送PUT和DELETE请求,只发出具有PUT和DELETE请求隐藏值的POST表单请求。但是我的同事告诉我应该用另一种方式来做。纯HTML?不允许使用Javascript?谢谢,所以我理解正确-没有办法在纯HTML上发送PUT和DELETE请求?只是评论说这就是我发现从特定视图限制http方法的原因。我有一个视图,我希望允许某人获取、发布或删除,但不允许放置或修补。