方法不允许(POST)Django 405错误

4

我刚刚将我的代码从基于函数的视图更改为基于类的视图,现在出现了一个无法解决的错误。

当用户按下提交他们的位置坐标按钮时,错误会出现。

Method Not Allowed: /connect/post [2019/02/11 14:27:17] HTTP POST /connect/post 405 [0.00, 127.0.0.1:57896]

之前一切正常,但我无法弄清楚我做错了什么。我有get和post请求。请问有人能够指点我正确的方向吗?

views.py

class ConnectView(View):
    template_name = 'connect/home.html'
    def get(self, request, *args, **kwargs):
        context = {
            'users': User.objects.exclude(username=request.user),
        }
        return render(request, self.template_name, context)

    def post(self, request, *args, **kwargs):
        location = Location(latitude=request.POST['latitude'], 
longitude=request.POST['longitude'], user = request.user)
        location.save()
        return JsonResponse({'message': 'success'})

urls.py

urlpatterns = [
    path('', connect_views.ConnectView.as_view(), name='connect_home'),
]

connect.html

<script>
function showPosition(position) {
    pos = position;
    var { latitude, longitude } = pos.coords;
    $('#btn_submit').attr("disabled", null);
  }

  $(document).ready(function() {
    $demo = $("#demo");
    $('#btn_submit').on('click', function() {
      var data = pos.coords;
      data.csrfmiddlewaretoken = $('input[name=csrfmiddlewaretoken]').val();
      $.post("post", data, function() {
        alert("Location Confirmed!");
      });
    });
  });

</script>

---omitted irrelevant code--
<button type="submit" id="btn_submit" class="btn btn-success" disabled>2. Confirm Location </button>

2
你确定你发布的URL是正确的吗?(也许只应该是connect/)。这里有一个类似的问题,其中提供了一些检查此类错误常见原因的指针。 - Ralf
自己记一下:405错误往往只是404错误的伪装。 - Sebastián Vansteenkiste
1个回答

4
您可能将内容发布到错误的URL上(将connect/post/用于connect/)。此问题提供了一些检查此错误通常原因的指针。
您可以尝试更改此行。
$.post("post", data, function() {

to

$.post(window.location, data, function() {

非常感谢,那确实是问题所在。做 window.location 相比于 $.post("", data, function() { 有什么好处呢?谢谢! - Trilla
@Trillz 喔,$.post("", ...); 也可以用吗?我不知道呢。如果可以的话,那当然是更少的代码,可能也是更好的选项。 - Ralf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接