在Django的POST中得到405个http错误,是尿液的问题吗?

0 人关注

在这个django应用程序中使用POST方法后获得405状态

##urls

"""Configuracoes de URL dos Resultados das Buscas
    https://docs.djangoproject.com/en/3.1/topics/http/urls/
from django.conf.urls import url
from django.urls import path
from . views import BuscaHorarios, AgendaHorario
app_name = "agendamento"
urlpatterns = [
    url(r'^(?P<prestadorservicosid>[0-9]+)(?:/(?P<unidadeid>[0-9]+))/$',
        AgendaHorario.as_view(),
        name='horarios',
    url('/', AgendaHorario.as_view(), name="agenda_horario"),

我认为问题出现在这里,但我不确定

##forms

from django.forms import Form, CharField, EmailField, EmailInput, TextInput
class AgendaHorarioForm(Form):
    nome_paciente = CharField(required=True, widget=TextInput(
        attrs={'placeholder': 'Digite seu nome completo',
               'class': 'form-control', 'label_tag': 'Nome do paciente'}))
    email_paciente = EmailField(widget=EmailInput(attrs={'placeholder': 'Digite seu e-mail', 'class': 'form-control', 'label_tag': 'E-mail'}))
    telefone_paciente = CharField(required=True, widget=TextInput(
        attrs={'placeholder': 'Digite seu telefone com DDD',
               'data-mask': '(00) 00000-0000',
               'class': 'form-control',
               'label_tag': 'Telefone com DDD'}))
class AgendaHorario(View):
    form_class_agenda = AgendaHorarioForm
    paciente = {}
    prestadorunidade = None
    prestadorservicos = None
    servicoregioes = None
    agenda_service = None
    horario_marcado = None
    def get_context_data(self, **kwargs):
        print('a')
        context = super().get_context_data(**kwargs)
        context['prestadorunidade'] = self.prestadorunidade
        context['prestadorservicos'] = self.prestadorservicos
        context['horario_marcado'] = self.horario_marcado
        context['paciente'] = self.paciente
        print('a')
        return context
    def post(self, *args, **kwargs):
        print('b')
        if self.request.is_ajax and self.request.method == "POST":
            form = self.form_class_agenda(self.request.POST)
            if form.is_valid():
                post_data = form.cleaned_data
                self.paciente['nome'] = post_data['nome_paciente']
                self.paciente['email'] = post_data['email_paciente']
                self.paciente['telefone'] = post_data['telefone_paciente']
                lista_unidades = list(cache.get('PrestadorUnidades', PrestadorUnidades.objects.values()))
                unidadeid = int(self.request.POST.get('prestadorunidadeid'))
                self.prestadorunidade = [item for item in lista_unidades if item['unidadeid'] == unidadeid][0]
                lista_prestadorservicos = list(cache.get('PrestadorServicos', PrestadorServicos.objects.values()))
                prestadorservicosid = int(self.request.POST.get('prestadorservicosid'))
                self.prestadorservicos = [
                    item for item in lista_prestadorservicos if item['prestadorservicoid'] == prestadorservicosid][0]
                lista_servicos = list(cache.get('ServicosRegioesCorpo', ServicosRegioesCorpo.objects.values()))
                self.servicoregioes = [item for item in lista_servicos if item['idservicosregioes']
                                       == self.prestadorservicos['idservicosregioes_fk_id']][0]
                servico = ServicosRegioesCorpo.objects.get(
                    idservicosregioes=self.prestadorservicos['idservicosregioes_fk_id'])
                horario = self.request.POST.get('horario-escolhido')
                self.horario_marcado = refatora_data(horario)
                self.horario_marcado = datetime.datetime.strptime(self.horario_marcado, '%Y-%m-%dT%H:%M')
                prestadorunidade_calendar_list = list(cache.get('Calendar', Calendar.objects.values()))
                prestadorunidade_calendar = [item for item in prestadorunidade_calendar_list if item['id']
                                             == self.prestadorunidade['calendar_id_fk']][0]
                prestadorunidade_calendar_obj = Calendar.objects.get(id=self.prestadorunidade['calendar_id_fk'])
                self.agenda_service = GoogleCalendarService(
                    prestadorunidade_calendar, prestadorunidade_calendar_obj, self.prestadorservicos)
                self.marcar_servico(self.horario_marcado)
                msg_sucesso = f'%s agendado com sucesso para %s. Anote na sua agenda!' % (
                    servico, self.paciente['nome'])
                return JsonResponse({"msg_sucesso": msg_sucesso, "horario_marcado": horario}, status=200)
            else:
                return JsonResponse({"error": form.errors}, status=400)
        return JsonResponse({"error": ""}, status=400)
    def marcar_servico(self, horario):
        print('c')
        servico = ServicosRegioesCorpo.objects.get(
            idservicosregioes=self.prestadorservicos['idservicosregioes_fk_id'])
        summary = f'%s com paciente %s. Contato: %s ou %s' % (str(servico),
                                                              self.paciente['nome'],
                                                              self.paciente['telefone'],
                                                              self.paciente['email'])
        lista_bairros = list(cache.get('Bairros', Bairros.objects.values()))
        bairro = [item for item in lista_bairros if item['bairroid'] == self.prestadorunidade['bairroid_fk_id']][0]
        location = f'%s %i, %s\n%s, %s\n%s' % (self.prestadorunidade['logradourounid'],
                                               self.prestadorunidade['numerounid'],
                                               self.prestadorunidade['complementounid'],
                                               bairro['bairro'],
                                               bairro['cidade'],
                                               self.prestadorunidade['cep'])
        descricao = 'Agendado pelo Saúde Pra Já.'
        self.agenda_service.marcar_evento(summary, location, horario, descricao)

简化HTML

<form id="schedule-form" action="" method="POST">
<input type="submit" id="submit-horario" value="Confirmar"/>