首页 > 解决方案 > Method Not Allowed (POST) in Django 3.1

问题描述

I am new to Django. Practicing in a small project in Dango 3.1 I get the error "Method Not Allowed (POST)". The error appears when a user presses the Guarder (Save) button.

Method Not Allowed: /pizarra/comunicado/
[30/Jul/2021 09:10:03] "POST /pizarra/comunicado/ HTTP/1.1" 405 0

Everything was working before and I can't understand what I'm doing wrong. Please if someone can help me. Thanks in advance.

comunicado_form.html

{% extends 'gestion/base_gestion.html' %}

{% block page_content %}
<form method="POST" class="form-group">
    {% csrf_token %}
    <div class="col-xl-12 col-md-12 mb-12">
        {% if obj %}
        <div class="card border-left-warning shadow h-100 py-2">
        {% else %}
        <div class="card border-left-success shadow h-100 py-2">
        {% endif %}
                <div class="card-body">
                <div class="row no-gutters align-items-center">
                    <div class="col mr-2">
                        <div class="text-xs font-weight-bold text-success text-uppercase mb-1">
                            {% if obj %}Editar{% else %}Nuevo{% endif %} Comunicado
                        </div>
                        <div class="dropdown-divider"></div>
                        <div class="col-sm-8">
                            <div class="col-8">
                                <div class="form-group">
                                    <label for="id_contenido">Contenido del mensaje:</label>
                                    {{ form.contenido }}
                                </div>
                            </div>
                            <div class="col-3">
                                <div class="form-group">
                                    <label for="id_fecha_vto">Fecha Vto:</label>
                                    {{ form.fecha_vto }}
                                </div>
                            </div>
                            <div class="col-2">
                                <div class="form-group">
                                    <label for="id_hora_vto">Hora Vto:</label>
                                    {{ form.hora_vto }}
                                </div>
                            </div>
                            <div class="col-3">
                                <div class="form-group">
                                    <label for="id_es_borrador">¿Es Borrador?:</label>
                                    {{ form.es_borrador }}
                                </div>
                            </div>
                            <div class="col-2">
                                <div class="form-group">
                                    <label for="id_es_borrador">Estado:</label>
                                    {{ form.estado }}
                                </div>
                            </div> 
                            <!-- {{ form.as_p }} -->
                        </div>
                    <div class="dropdown-divider"></div>
                        <div class="row">
                            <div class="col">
                                <button type="submit" class="btn btn-danger"><span class="fa fa-save"></span> Guardar</button>
                                <a href="{% url 'pizarra:comunicado_list' %}" class="btn btn-success"><span class="fa fa-undo"></span> Cancelar</a>
                            </div>
                        </div> 
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>
{% endblock page_content %}

{% block js_page %}
<script>
    $(function () {
        $("#id_fecha_vto").datetimepicker({
            format: 'd-m-Y',
            timepicker:false
        });
    });
    $(function () {
        $("#id_hora_vto").datetimepicker({
            format: 'H:i',
            datepicker:false
        });
    });
</script>
{% endblock js_page %}

urls.py in app

from django.contrib import admin
from django.urls import path, include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

from blogapp import views

# agregamos estas dos lineas
from django.conf import settings
from django.conf.urls.static import static

from django.contrib.auth import views as auth_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blogapp/',include(('blogapp.urls','blogapp'), namespace='blogapp')),
    path('pizarra/', include(('pizarra.urls','pizarra'), namespace='pizarra')),
    path('home',include(('blogapp.urls','home'), namespace='home')),
    path('login/',auth_views.LoginView.as_view(template_name='blogapp/login.html'),
    name='login'),
    path('', views.index),

]
urlpatterns += staticfiles_urlpatterns()

urls.py in pizarra

from django.urls import path

from .views import ComunicadoNew, ComunicadoEdit, ComunicadoDel, ComunicadoView

urlpatterns = [
    #-------------------- PIZARRA (Comunicados)---------------------------
    path('comunicado/',ComunicadoView.as_view(), name='comunicado_list'),
    path('comunicado/new',ComunicadoNew.as_view(), name='comunicado_new'),
    path('comunicado/edit/<int:pk>',ComunicadoEdit.as_view(), name='comunicado_edit'),
    path('comunicado/delete/<int:pk>',ComunicadoDel.as_view(), name='comunicado_del'),
]

views.py in pizzarra

from django.shortcuts import render, redirect
from django.views import generic
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin

from .models import Comunicado
from .forms import ComunicadoForm

# Create your views here.

class ComunicadoView(LoginRequiredMixin,generic.ListView):
    model = Comunicado
    template_name = "pizarra/comunicado_list.html"
    context_object_name = "obj"
    login_url = 'blogapp:login'

class ComunicadoNew(LoginRequiredMixin,generic.CreateView):
    model = Comunicado
    template_name = "pizarra/comunicado_form.html"
    context_object_name = "obj"
    form_class=ComunicadoForm
    success_url=reverse_lazy("pizarra:comunicado_list")
    login_url="blogapp:login"
    
    def form_valid(self, form):
        form.instance.uc = self.request.user
        return super().form_valid(form)

I have defined the static / js as follows:

<!-- Custom fonts for this template-->
  <link href="{% static 'blogapp/vendor/fontawesome-free/css/all.min.css' %}" rel="stylesheet" type="text/css">
  <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

  <!-- Custom styles for this template-->
  <link href="{% static 'blogapp/css/sb-admin-2.min.css' %}" rel="stylesheet">

  <!-- Custom styles for this page -->
  <link href="{% static 'blogapp/vendor/datatables/dataTables.bootstrap4.min.css' %}" rel="stylesheet">  
  <!-- jquery-confirm -->
  <link href="{% static 'blogapp/vendor/jquery_confirm/jquery-confirm.min.css' %}" rel="stylesheet">  

  <!-- XDSoft DateTimePicker -->  
  <!-- <link rel="stylesheet" href="{% static 'blogapp/vendor/jquery-datetimepicker/jquery.datetimepicker.min.css" type="text/css">   -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.min.css" integrity="sha256-DOS9W6NR+NFe1fUhEE0PGKY/fubbUCnOfTje2JMDw3Y=" crossorigin="anonymous" />  

and


  <!-- Bootstrap core JavaScript-->
  <script src="{% static 'blogapp/vendor/jquery/jquery.min.js' %}"></script>
  <script src="{% static 'blogapp/vendor/bootstrap/js/bootstrap.bundle.min.js' %}"></script>

  <!-- Core plugin JavaScript-->
  <script src="{% static 'blogapp/vendor/jquery-easing/jquery.easing.min.js' %}"></script>

  <!-- Custom scripts for all pages-->
  <script src="{% static 'blogapp/js/sb-admin-2.min.js' %}"></script>
  
  <!-- Page level plugins -->
  <script src="{% static 'blogapp/vendor/datatables/jquery.dataTables.min.js' %}"></script>
  <script src="{% static 'blogapp/vendor/datatables/dataTables.bootstrap4.min.js' %}"></script>

  <script src="{% static 'blogapp/vendor/jquery_confirm/jquery-confirm.min.js' %}"></script>
 
 
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.5.20/jquery.datetimepicker.full.min.js" integrity="sha256-FEqEelWI3WouFOo2VWP/uJfs1y8KJ++FLh2Lbqc8SJk=" crossorigin="anonymous"></script>  

标签: python-3.xdjango

解决方案


推荐阅读