Daily Archives: Среда, Октябрь 30, 2013

SQLFORM.grid — коробочный настраиваемый броузер таблиц

Быстро вывести табличку с базой данных поможет такая простая конструкция в web2py :

grid = SQLFORM.grid(db.table)

А вот и параметры ее

SQLFORM.grid(
query,
fields=None, # выборка полей для вывода
field_id=None, # id - поле
left=None, # LEFT JOIN
headers={}, # Заголовки
orderby=None, # сортировка
groupby=None, # группировка
searchable=True, # поле поиска
sortable=True, # кнопки сортировки
paginate=20, # записей на страницу
deletable=True, # кнопка удалить
editable=True, # кнопка редактировать
details=True, # кнопка Подробнее
selectable=None, # чекбокс для выбора
create=True, # можно создавать новые элементы
csv=True, # экспорт в csv
links=None, # поля - ссылки
links_in_grid=True, # показывать в главной таблице ссылки
upload='<default>', #
args=[], #
user_signature=True, #
maxtextlengths={}, # максимальная длина текста в полях
maxtextlength=20, #
onvalidation=None, # функция вызываемая при проверке формы
oncreate=None, # функция при создании нового элемента
onupdate=None, # функция при редактировании элемента
ondelete=None, # функция при удалении элемента
sorter_icons=(XML('&#x2191;'), XML('&#x2193;')), # иконки сортировки
ui = 'web2py', # можно поставить jquery-ui, либо описать все компоненты индивидуально словарем
showbuttontext=True, # Текст на кнопках
_class="web2py_grid", # класс формы
formname='web2py_grid', # имя формы
search_widget='default', # поисковая форма
ignore_rw = False, #
formstyle = 'table3cols', #
exportclasses = None, #
formargs={}, # аргументы формы
createargs={}, # аргументы функции создания нового элемента
editargs={}, # аргументы функции редактирования элемента
viewargs={}, # аргументы функции просмотра элемента
buttons_placement = 'right', # кнопки справа
links_placement = 'right' # ссылки справа
)

Credits : http://www.web2py.com/book/default/chapter/07#SQLFORM.grid

logging : пишем логи в файл

Выводим время, уровень ошибки, файл и строку вызова, ну и естественно, текст сообщения:

import logging
logging.basicConfig(format = u'%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s', level = logging.DEBUG,  filename = u'applog.log')

logging.debug('This is just a debug')

via http://habrahabr.ru/post/144566/

upd: лучший пример со stackoverfow :

import logging
log = logging.getLogger("mylog")
log.setLevel(logging.DEBUG)

formatter = logging.Formatter(
    "%(asctime)s %(threadName)-11s %(levelname)-10s %(message)s")
# Alternative formatting available on python 3.2+:
# formatter = logging.Formatter(
#     "{asctime} {threadName:>11} {levelname} {message}", style='{')

# Log to file
filehandler = logging.FileHandler("debug.txt", "w")
filehandler.setLevel(logging.DEBUG)
filehandler.setFormatter(formatter)
log.addHandler(filehandler)

# Log to stdout too
streamhandler = logging.StreamHandler()
streamhandler.setLevel(logging.INFO)
streamhandler.setFormatter(formatter)
log.addHandler(streamhandler)

# Test it
log.debug("Some message")
log.error("An error!")
try:
    something()
except:
    log.exception("An exception occured!")

via http://stackoverflow.com/questions/4722745/logging-between-classes-in-python