在这个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"/>