Python 放入并删除Django

Python 放入并删除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(

我对django和python还比较陌生,现在有几天我在尝试如何通过django表单发送PUT和DELETE请求

我发现以下主题:

但是这个话题解决这个问题的方式对我来说并不容易。所以问题是-有没有简单的方法通过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)
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并显示有关此路线的信息
当我按下“delete”键时,我想查看并接收删除请求

最后,我这样做:

<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方法的原因。我有一个视图,我希望允许某人获取、发布或删除,但不允许放置或修补。