Найти - Пользователи
Полная версия: Связать JS-скрипт и вью
Начало » Django » Связать JS-скрипт и вью
1
kukuruku11
Доброго времени суток! Подскажите пожалуйста, как отправить POST-данные передаваемые в скрипте во вью на питоне.
Скрипт такой (запрашивает значение phone в модальном окне) в недописанном состоянии:

$("#book__form").submit(function(){
    if($('input[name="phone"]').val() == ""){
        alert("Введите номер телефона")
    }else{
        $(".modal_div_book_book").hide(),
        $(".modal_div_book_success").show();
        var data = $('#book__form').serializeArray();
        $.ajax({
           type: "post",
           data: data,
            error: function(err){
                console.log('error');
           },
           success: function(msg){
                console.log('success');
           },
            dataType: 'json',
        });
    }
    return false;
});

Кусок шаблона под модалку:
<form id="book__form">
            {% csrf_token %}
            <input type="text" name="phone" placeholder="Введите телефон "  />
            <input type="submit" value="Заказать звонок"/>
        </form>

На прочих страницах информация из шаблона обрабатывается вьюхой без модальных окон.
Кусок шаблона

<form action="" method="post">
                    {% csrf_token %}
                    <div class="feedback__title">Вы можете связаться с нами<br>заполните форму</div>
                    <input name="name" type="text" placeholder="Введите имя">
                    <input name="phone" type="tel" placeholder="Введите телефон +7 XXX XXX XX XX">
                    <textarea name="message" placeholder="Ваше сообщение (не обязательно)"></textarea>
                    <button type="submit">Отправить сообщение</button>
                </form>

B собственно вьюха на основе DetailView:
class BaseContactsView(DetailView):
model = Contacts
def get_object(self, queryset=None):
    return super(BaseContactsView, self).get_queryset().first()
def dispatch(self, request, *args, **kwargs):
    self.form = CallbackForm(self.request.POST or None)
    return super(BaseContactsView, self).dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
    context = super(BaseContactsView, self).get_context_data(**kwargs)
    context.update({
        'form': self.form,
        'errors': self.form.errors if self.form.errors else None,
        'page': SeoUrl.objects.filter(page=CONTACTS).first()
    })
    return context
def post(self, request, *args, **kwargs):
    print request.POST
    print '================================================================='
    if self.form.is_valid():
        self.form.save()
        send_mail(self.request.POST.get('name'),
                  "%s - %s - %s" % (self.request.POST['phone'], self.request.POST.get('message', None), self.request.path),
                    'noreply@xxx.ru', [User.objects.filter(is_superuser=True).first().email])
        return HttpResponseRedirect('/thanks/')
    # return self.get(self, request, *args, **kwargs)
    return True

И, собственно, вопрос Могу ли я задействовать существующую вью (отправляет данные в админку и на почту)? Или мне нужно писать отдельную? И как связать скрипт и вьюху?

Скажите, пожалуйста, где прочитать/посмотреть
balalay12
В js скрипте пропишите url вьюхи.

$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

Во вью проверяйте пришел json или нет
if request.is_ajax():
    if request.method == 'POST':
        in_data = json.loads(request.body)
        return HttpResponse("POST")

Как-то так.
Да и в гугле много всего есть для того, чтобы посмотреть как примерно делать.
kukuruku11
Спасибо
kukuruku11
Урл приписал, непонятно на какой стадии вью вводить проверку json

и с какую функцию несет эта строка
in_data = json.loads(request.body)
balalay12
Проверку json делать в post и проверять что пришло. Если пришел json то брать данные из него, если нет то из POST.

json.loads делает из json питоновский словарь http://pythonworld.ru/moduli/modul-json.html

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB