Python 另一页上带有表单操作的POST请求返回405,不';t进程请求.POST

Python 另一页上带有表单操作的POST请求返回405,不';t进程请求.POST,python,django,django-views,Python,Django,Django Views,其想法是显示一个搜索框,用户可以在其中键入地址,地址由谷歌自动完成。然后,我们保存lat和long参数,并重定向到/search(使用POST)或(可能使用GET请求)或者/search?lat=xxx&long=xxx 对于第二种情况,对于URL参数,我可以使用lat=request.GET('lat') 我的Index.html表单 <form action="{% url 'users:index' %}" method="post" enctype="multipart/form-

其想法是显示一个搜索框,用户可以在其中键入地址,地址由谷歌自动完成。然后,我们保存lat和long参数,并重定向到
/search
(使用POST)或(可能使用GET请求)或者
/search?lat=xxx&long=xxx

对于第二种情况,对于URL参数,我可以使用
lat=request.GET('lat')

我的Index.html表单

<form action="{% url 'users:index' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input id="searchTextField" type="text" size="50" placeholder="Enter a location" autocomplete="on" runat="server" />
<input type="hidden" id="cityname" name="cityname" />
<input type="hidden" id="Lat" name="Lat" />
<input type="hidden" id="Lng" name="Lng" />
<button type="submit">Submit</button>
</form>
然而,当我提交表单时,这给了我一个空白页。当
表单操作
为空时,它将表单提交到同一页面,并正确显示Lat、Long。但是当表单操作是
/users/
时,它会给我一个405错误

这样做是否可行,或者我是否需要执行GET请求,例如,将URL参数作为链接传递,因此我只需要一个链接,而不是表单:

users?lat=xxx&long=xxx

在我必须使用Js以某种方式填充xxx的地方,
ListView
没有定义
post
方法,因此它将为post请求返回状态代码405

您可以定义一个
post
方法,该方法只需调用视图的
get()
方法:

class IndexView(ListView):
    ...

    def post(self, request, *args, **kwargs):
        """Allow post requests for form submissions"""
        return super(IndexView, self).get(request, *args, **kwargs)

ListView
没有定义
post
方法,因此它将为post请求返回状态代码405

您可以定义一个
post
方法,该方法只需调用视图的
get()
方法:

class IndexView(ListView):
    ...

    def post(self, request, *args, **kwargs):
        """Allow post requests for form submissions"""
        return super(IndexView, self).get(request, *args, **kwargs)


您必须定义post方法,但始终可以将表单方法设置为GET。这对于搜索框来说更为正确,因为GET用于获取数据,POST用于提供服务器必须存储的数据,PUT用于更新数据。因此,您应该使用GET作为表单方法。此外,如果使用GET as方法,浏览器的后退和前进按钮还将包含“lat”、“long”参数,因此您将有后退和前进按钮。无需生成链接。

您必须定义post方法,但始终可以将表单方法设置为GET。这对于搜索框来说更为正确,因为GET用于获取数据,POST用于提供服务器必须存储的数据,PUT用于更新数据。因此,您应该使用GET作为表单方法。此外,如果使用GET as方法,浏览器的后退和前进按钮还将包含“lat”、“long”参数,因此您将有后退和前进按钮。不需要生成链接。

您有一个html格式的表单,但您的视图只处理get请求,您必须更新它并继承FormView或使用所有表单处理代码添加post函数

您有一个html格式的表单,但是您的视图只处理get请求,您必须更新它并继承FormView或添加带有所有表单处理代码的post函数

你是否在你的观点中定义了Post方法?我认为这可能是问题所在。。。让我检查一下这个响应代码(405)可能来自任何数量的问题,但通常结果是您使用了错误的URL或使用了错误的请求方法终端中有错误吗?您是否在视图中定义了Post方法?我认为这可能是问题所在。。。让我检查一下这个响应代码(405)可能来自任何数量的问题,但通常结果是您使用了错误的URL或使用了错误的请求方法。我从django.http导入了HttpResponseRedirect,HttpRequest,它是灰色的(没有在任何地方使用)终端中有任何错误吗?谢谢!对于这种情况,您是否建议使用GET或is POST更好?因为您没有修改数据,所以此搜索表单的GET请求也可以。还有一件事,如果我向forms.py添加一个表单并进行类似于“是”的验证,Django表单在此视图中可能会很有用。它可以验证
Lat
Long
是否在所需范围内的浮点数/小数。谢谢!对于这种情况,您是否建议使用GET或is POST更好?因为您没有修改数据,所以此搜索表单的GET请求也可以。还有一件事,如果我向forms.py添加一个表单并进行类似于“是”的验证,Django表单在此视图中可能会很有用。它可以验证
Lat
Long
是否为所需范围内的浮点数/小数。