Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2013 15:20:06

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

Вопрос новичка.
На сколько я понял, ф-ии представления вызываются при переходе на определённые url (зависимость прописывается в urls.py). Можно ли вызвать нужную мне ф-ию без перехода куда-либо? Т.е. есть страница, на которой я добавляю записи в БД, жму кнопку, которая вызывает нужную мне ф-ию, добавляющую эти данные в БД, я остаюсь на этой же странице. Какой механизм используется для реализации такого функционала?
Спасибо.

Офлайн

#2 Фев. 26, 2013 16:40:34

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

Аяксом сделайте.
Только про переход на определенный урл, Вы наверное недопоняли.
Вам урл придется по любому сделать для аякс-запроса.
Просто добавляете записи на странице в БД(полагаю форма), сериализуете ее, делаете ajax post(на этот самый урл, там внутри вьюхи добавляется уже реально в БД и идет ответ тоже json). На странице ловите ответ в этом же скрипте, можно при этом прислать и кусочек html и добавить его на страницу, чтобы на клиенте данные тоже добавленными выглядели.
Я вот тут свой вариант про аякс писал, но это для формы
http://python.su/forum/topic/20799/
А если без формы, то вьюха будет еще проще

def add_data(request):
    try:
        # тут обрабатываем полученные данные.
        # даже если данные пришли с формы можете к ним обращаться request.REQUEST['параметр']
        payload = {'success': True}
    except:
        payload = {'success': False}
    return HttpResponse(json.dumps(payload, cls=LazyEncoder), content_type='application/json')

Офлайн

#3 Фев. 26, 2013 17:21:16

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

Спасибо, попробую.
А если мне ответ от сервера не нужен, тоже аяксом или не обязательно?

Офлайн

#4 Фев. 27, 2013 03:55:18

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

А как это “ответ от сервера не нужен”?
По-моему так неправильно. Подтверждение о успехе или ошибке обязательно надо получать.

Офлайн

#5 Фев. 27, 2013 10:26:34

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

Ну да, я имел в виду, что выводить его мне никуда не нужно.

Офлайн

#6 Фев. 27, 2013 11:47:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

terrrible
Ну да, я имел в виду, что выводить его мне никуда не нужно.
Это уже проблемы клиентской стороны. Если Ваша вьюха не будет вообще возвращать HttpResponse, Джанга будет ругаться на ошибку. Возвращайте пустой HttpResponse.



Офлайн

#7 Фев. 27, 2013 11:50:33

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

Ну возвращайте success=True хотя бы. Если ответа не будет, этот скрипт все равно будет ожидать ответа от сервера.
А сбрасывать соединие- это явно плохой тон.

Офлайн

#8 Фев. 28, 2013 12:02:39

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

Я наверное что-то недопонимаю:
ну вот делаю я post на url по которому запускается нужная ф-ия представления, всё ок, но только ведь осущестляется загрузка этой страницы, которую в пост вписывал. Так как выполнить запрос, не переходя никуда?

Отредактировано terrrible (Фев. 28, 2013 12:02:55)

Офлайн

#9 Фев. 28, 2013 12:30:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

Во-первых, вовсе не обязательно, чтобы сервер возвращал HTML-страницу. Главное, чтобы он вернул валидный HttpResponse.
Во-вторых, если пост отправляешь аяксом, то по получению ответа клиентская сторона не перезагружает страницу, а передает скрипту полученные данные. Что с ними будут делать твой скрипт, твои проблемы. Что ты передашь клиенту в качестве данных, тоже твои проблемы, можешь не передавать ничего.
Вы вообще удосужились хоть что-то прочитать про AJAX?



Офлайн

#10 Фев. 28, 2013 12:45:44

terrrible
Зарегистрирован: 2013-02-26
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

как вызвать ф-ию представления

FishHook
Во-первых, вовсе не обязательно, чтобы сервер возвращал HTML-страницу. Главное, чтобы он вернул валидный HttpResponse.Во-вторых, если пост отправляешь аяксом, то по получению ответа клиентская сторона не перезагружает страницу, а передает скрипту полученные данные. Что с ними будут делать твой скрипт, твои проблемы. Что ты передашь клиенту в качестве данных, тоже твои проблемы, можешь не передавать ничего.Вы вообще удосужились хоть что-то прочитать про AJAX?

Да, конечно я удосужился, но механизма с формой не пойму.

Форма, данные которой отправляются в базу имеет атрибут action, вот в нём что должно быть прописано? Если там url (например, /add/), по которому вызывается нужная ф-ия, то всё работает. Если я убираю из экшена этот url, то переход не происходит, но и в базу ничего не добавляется. Может в post я пишу url как-то неправильно?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version