Если геомагнитная статистика начнет собираться в таких масштабах то это даст мощный толчок картографическим сервизам. Не хватает только определение ускорения свободного падения чтобы получать информацию о подземных недрах.
Пройдешь так в лесу пару десятков километров с запущенным приложением на смартфоне и хоп получаешь отчет «залежи минеральных ископаемых в кол-ве: N»
Не знаю что тут происходит но вот хорошая штука для отображение данных основанных на времени square.github.com/cubism/
Там даже две версии серверной части поддерживается.
Статья супер, очень элегантно и крисиво.
Я рисую графики в dojo при помощи dojango. Но получается это громоздко.
А за django-qsstats-magic отдельное спасибо
jQuery используют почти 30% сайтов, отслеживаемых builtwith.com. Выбор другой библиотеки будет свидетельствовать о менее компетентных разработчиках, менее доступном коде и небольшом сообществе поддержки.
Привет всем, в своем веб-приложении мне необходимо изменять и добавлять данные по еще пока не известной модели, как через ajax так и через обычную форму.
Естественно я использовал modelform'ы, и очень удобную разработку под название dojango. Dojango элементарно устанавливается и теперь наши django виджеты превращаются на выходе в виде dojo виджетов c той валидацией что мы определили в модели\форме.
Теперь осталось просто вывести форму в виде html — form.as_ul(), и ждать ответа.
Dojo виджеты нам обеспечат валидацию на стороне клиента, из нашей формы без грамма кода. А серверную валидацию надо обеспечить нам.
Вот мой код для вывода формы\валидации и оправки ошибок\и если нет ошибок то перенаправления на объект.
Боюсь что код не прапарсится, вот ссылка на него
def show_form(request,oper,id=None):
#print request.path
import newdisp.whs.models as models # Все модели берем, и доставать нужную будем через getattr
try:
f=getattr(models,oper+'_form') # Берем
except AttributeError,e: #Ловим неправильные название форм
raise Http404('Page not found') # как вариант возвращять json({'status':'error'})
if 'id' in request.POST: # Переменые в запросах приходят строками, делаем в int
id = int(request.POST['id'])
if id is None: #Если нет айди значит добавление
m=getattr(models,oper)() # Берем модель, и вызываем ее без параметров, что означает пустому экземпляру.
else: # Значит изменение
id=int(id) #еще раз
try:
m=getattr(models,oper).objects.get(pk=id) # Берем модель с данными которые будем изменять
except ObjectDoesNotExist,e:
raise Http404('Page not found')
if request.method == 'POST': # Если пост то обрабатываем данные, если гет то вывод html формы
post=request.POST.copy() # Копируем массив, ибо request — read only
if 'price' in post.keys(): # Заменяем замечательные русские запятые в float числах
post['price']=post['price'].replace(',','.')
if 'delivery' in post.keys():
post['delivery']=post['delivery'].replace(',','.')
form = f(post,instance=m) # Создаем форму и наполняем ее даными из модели
if form.is_valid(): # Если ошибок нет, то сохраняем и редиректив на ссылку
# где ей отдадут json данные модели
inst = form.save()
return HttpResponseRedirect('/whs/id/%s/%d' % (oper,inst.id))
else: # Если ошибки, вернуть json со статусом ошибки и сообщения ошибки
re={'status':'error','message':form.errors}
return HttpResponse(json(re),mimetype=«application/json»)
else:
form = f(instance=m) # вывод html формы
if request.is_ajax(): # Если jax то вернуть просто html, я оберну ее в форму на стороне клиента
return HttpResponse(form.as_ul(),mimetype=«text/html») #Если ajax срем говый вариантик
# Если обычный, то обрабатываем. Это надо сделать через шаблон.
re=u' '
re+=u''
re+=form.as_ul() # Вывести ее как список
#re+=u''
re+=u''
re+=u''
return HttpResponse(re,mimetype=«text/html»)
На стоне клиента надо написать код на dojo, чтобы забрать форму, пропарсить его dojo.parser, и создать xhtPost формы.
При попытке отправки формы, dojo проверит данные еще раз на соответсвие типам, и отправит данные.
Дальше их поймает django, проверит на логичность(например повторение уникальных значений) и сгенерирует текст ошибки на чистом русском языке, что мы и отправим обратно форме в виде json
Например:
{
status: «error»
-message: {
-number: [
«Накладная с таким № документа уже существует.»
]
}
}
Осталось растолкать это по полям формы dojo.
if (result.status == 'error') {
for (var i in result.message) {
var input = dijit.byNode(dojo.query('.dijit [name="' + i + '"]', this.form.containerNode)[0].parentNode.parentNode);
input.state = 'Error';
input._setStateClass();
dijit.setWaiState(input, 'invalid', 'true');
input._maskValidSubsetError = true;
dijit.showTooltip(result.message[i], input.domNode, input.tooltipPosition);
}
}
else {
alert('СХОРАНЕНО');
//return result;
}
Вот клиентская валидация:
А вот уже ответ с сервера(заметьте сообщения создано автоматически и «из коробки» django)
Пройдешь так в лесу пару десятков километров с запущенным приложением на смартфоне и хоп получаешь отчет «залежи минеральных ископаемых в кол-ве: N»
Там даже две версии серверной части поддерживается.
А phpBB для меня уже винтаж.
Например в dojo или extJs.
Подскажите ключевые слова :)
А сайт какой то очень странный, при скролинге шрифт получается разорванным вдоль пополам со смешением.(Ubuntu, Chrome)
Я рисую графики в dojo при помощи dojango. Но получается это громоздко.
А за django-qsstats-magic отдельное спасибо
Тут же нет логики
Естественно я использовал modelform'ы, и очень удобную разработку под название dojango. Dojango элементарно устанавливается и теперь наши django виджеты превращаются на выходе в виде dojo виджетов c той валидацией что мы определили в модели\форме.
Теперь осталось просто вывести форму в виде html — form.as_ul(), и ждать ответа.
Dojo виджеты нам обеспечат валидацию на стороне клиента, из нашей формы без грамма кода. А серверную валидацию надо обеспечить нам.
Вот мой код для вывода формы\валидации и оправки ошибок\и если нет ошибок то перенаправления на объект.
Боюсь что код не прапарсится, вот ссылка на него
def show_form(request,oper,id=None):
#print request.path
import newdisp.whs.models as models # Все модели берем, и доставать нужную будем через getattr
try:
f=getattr(models,oper+'_form') # Берем
except AttributeError,e: #Ловим неправильные название форм
raise Http404('Page not found') # как вариант возвращять json({'status':'error'})
if 'id' in request.POST: # Переменые в запросах приходят строками, делаем в int
id = int(request.POST['id'])
if id is None: #Если нет айди значит добавление
m=getattr(models,oper)() # Берем модель, и вызываем ее без параметров, что означает пустому экземпляру.
else: # Значит изменение
id=int(id) #еще раз
try:
m=getattr(models,oper).objects.get(pk=id) # Берем модель с данными которые будем изменять
except ObjectDoesNotExist,e:
raise Http404('Page not found')
if request.method == 'POST': # Если пост то обрабатываем данные, если гет то вывод html формы
post=request.POST.copy() # Копируем массив, ибо request — read only
if 'price' in post.keys(): # Заменяем замечательные русские запятые в float числах
post['price']=post['price'].replace(',','.')
if 'delivery' in post.keys():
post['delivery']=post['delivery'].replace(',','.')
form = f(post,instance=m) # Создаем форму и наполняем ее даными из модели
if form.is_valid(): # Если ошибок нет, то сохраняем и редиректив на ссылку
# где ей отдадут json данные модели
inst = form.save()
return HttpResponseRedirect('/whs/id/%s/%d' % (oper,inst.id))
else: # Если ошибки, вернуть json со статусом ошибки и сообщения ошибки
re={'status':'error','message':form.errors}
return HttpResponse(json(re),mimetype=«application/json»)
else:
form = f(instance=m) # вывод html формы
if request.is_ajax(): # Если jax то вернуть просто html, я оберну ее в форму на стороне клиента
return HttpResponse(form.as_ul(),mimetype=«text/html») #Если ajax срем говый вариантик
# Если обычный, то обрабатываем. Это надо сделать через шаблон.
re=u' '
re+=u''
re+=form.as_ul() # Вывести ее как список
#re+=u''
re+=u''
re+=u''
return HttpResponse(re,mimetype=«text/html»)
На стоне клиента надо написать код на dojo, чтобы забрать форму, пропарсить его dojo.parser, и создать xhtPost формы.
При попытке отправки формы, dojo проверит данные еще раз на соответсвие типам, и отправит данные.
Дальше их поймает django, проверит на логичность(например повторение уникальных значений) и сгенерирует текст ошибки на чистом русском языке, что мы и отправим обратно форме в виде json
Например:
{
status: «error»
-message: {
-number: [
«Накладная с таким № документа уже существует.»
]
}
}
Осталось растолкать это по полям формы dojo.
if (result.status == 'error') {
for (var i in result.message) {
var input = dijit.byNode(dojo.query('.dijit [name="' + i + '"]', this.form.containerNode)[0].parentNode.parentNode);
input.state = 'Error';
input._setStateClass();
dijit.setWaiState(input, 'invalid', 'true');
input._maskValidSubsetError = true;
dijit.showTooltip(result.message[i], input.domNode, input.tooltipPosition);
}
}
else {
alert('СХОРАНЕНО');
//return result;
}
Вот клиентская валидация:
А вот уже ответ с сервера(заметьте сообщения создано автоматически и «из коробки» django)