Невозможно отправить данные в django функцию, используя ajax - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь добавить данные и просмотреть данные в / из django базы данных через AJAX вызовы, выборка данных работает нормально, но добавление данных не работает. Я получаю следующую ошибку:

Method Not Allowed (POST): /mymodels/
Method Not Allowed: /mymodels/
[17/Mar/2020 22:27:24] "POST /mymodels/ HTTP/1.1" 405 0

и в консоли браузера:

0: undefined

Моя ajax функция:

$(document).on('submit', '#myform', function(e){
    $.ajax({
        type: 'POST',
        url: `/mymodels/create`,
        data:{
            first_name:$('#first_name').val(),
            last_name:$('#last_name').val(),
            age:$('#age').val()
        },
        success:function(json){
            console.log("Data submitted");
        },
        error:function(xhr,errmsg,err)
        {
            console.log(xhr.status + ": " + xhr.responseText);
        }
    })
})

urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('mymodels/', TemplateView.as_view(template_name='crud_app/main.html'),name='mymodel_main'),
    path('mymodels/list', views.MyModelList.as_view(), name='mymodel_list'),
    path('mymodels/create', views.MyModelCreate.as_view(), name='mymodel_create'),
    path('mymodels/update/<int:pk>', views.MyModelUpdate.as_view(), name='mymodel_update'),
    path('mymodels/delete/<int:pk>', views.MyModelDelete.as_view(), name='mymodel_delete'),
    path('mymodels/<int:pk>', views.MyModelDetail.as_view(), name='mymodel_detail'),
]

просмотр:

class MyModelCreate(CreateView):
    def post(self,request):
        data = dict()
        form = MyModelForm(request.POST)
        if form.is_valid():
            my_model = form.save()
            data['my_model'] = model_to_dict(my_model)
        else:
            data['error'] = 'Form invlaid'
        return JsonResponse(data)

и, наконец, моя html форма:

<form class="form-group" id="myform" method="POST">
{% csrf_token %}
  <label for="first_name">First Name</label>
  <input type="text" class="form-control" name="" id="first_name" placeholder="">
  <label for="last_name">Last Name</label>
  <input type="text" class="form-control" name="" id="age_name" placeholder="">
  <label for="age">age</label>
  <input type="text" class="form-control" name="" id="age" placeholder="">
  <input  type="submit" class="btnSubmit btn btn-primary" value="Submit">
</form>
{% endblock %}

{% block extrajs %}
<script src="{% static 'js/app.js' %}"></script>
{% endblock %}

Ответы [ 2 ]

1 голос
/ 17 марта 2020

ваш ajax код нуждается в некотором улучшении, измените ваш ajax код на этот ..

    $(document).on('submit', '#myform', function(e){
    e.preventDefault()
   var formAction = $('#myform').attr('action')
       $.ajax({
           url: formAction,
           data: $('#myform').serialize(),
           type: 'POST',
           success:function(json){
               console.log("Data submitted");
           },
           error:function(xhr,errmsg,err){
               console.log(xhr.status + ": " + xhr.responseText);
           }
                });
            });
0 голосов
/ 17 марта 2020

Вам необходимо передать токен csrf в запросе. Вы можете отправить это с:

$(document).on('submit', '#myform', function(e){
    $.ajax({
        type: 'POST',
        url: `/mymodels/create`,
        data:{
            first_name:$('#first_name').val(),
            last_name:$('#last_name').val(),
            age:$('#age').val(),
            <b>csrfmiddlewaretoken: '{{ csrf_token }}'</b>
        },
        success:function(json){
            console.log("Data submitted");
        },
        error:function(xhr,errmsg,err)
        {
            console.log(xhr.status + ": " + xhr.responseText);
        }
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...