Если вдруг внезапно unable to open database file — это апачу не хватает прав на запись в папку с базой. Ну это если других косяков нет
Рубрика: Программизмы
Логи на удаленный syslog-ng
А все просто, стандартный модуль logging вполне справляется с этим:
import logging from logging.handlers import SysLogHandler log = logging.getLogger('loggername') log.addHandler(SysLogHandler(address=('localhost', 514))) log.setLever(logging.INFO) log.info('Log test') |
Крайне рекомендуется прочесть logging-cookbook
Как использовать Django из внешнего скрипта
Для асинхронной задачи можно создать команду (django management command), или подключить джагну к своему сприпту:
import sys sys.path.append('/path/to/django/projectname') from projectname import settings from django.core.management import setup_environ setup_environ(settings) #Получаем настроенную среду django: from main.models import Model1 print Model1.objects.all() |
OpenOCD & OSX & FTDI-CoLink
Если установлены драйвера FTDI VCP (Virtual Com Port) OpenOCD к Colink не подцепится — канал A уже используется.
Или выгрузить кекст или поправить
/System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist
на предмет комментирования секции подключения канала А:
<key>FT2232C_A</key> <dict> <key>CFBundleIdentifier</key> <string>com.FTDI.driver.FTDIUSBSerialDriver</string> <key>IOClass</key> <string>FTDIUSBSerialDriver</string> <key>IOProviderClass</key> <string>IOUSBInterface</string> <key>bConfigurationValue</key> <integer>1</integer> <key>bInterfaceNumber</key> <integer>0</integer> <key>idProduct</key> <integer>24592</integer> <key>idVendor</key> <integer>1027</integer> </dict> |
ну и перезагрузить кекст.
Админка по-умолчанию для всех моделей
В процессе разработки часто требуется по-быстрому зарегистрировать в админке все модели,
на мой взгляд, самый простой и быстрый способ:
добавить в admin.py:
from django.contrib import admin import models #Функция возвращающая список моделей в модуле def list_models(module): import inspect from django.db import models classes = [] for name, obj in inspect.getmembers(module): if inspect.isclass(obj) and issubclass(obj, models.Model): classes.append(obj) return classes #Регистрируем все модели for model in list_models(models): admin.site.register(model, admin.ModelAdmin) |
Windows, COM, 1C и Python
Пролог
Потребовалось сделать выгрузку из 1С в куда-то еще. 1С версии 8.2, но подобным же образом можно получить данные из 7.7, 8.0, 8.1 и думается 8.3 — только названия документов другие.
Данные будем получать через COM — на сколько я знаю, у 1Сников это довольно распростаненный способ, и документации довольно много.
Для работы с COM на питоне потребуется модуль win32com — установка ничем необычным не отличается.
Для напримера, из стандартной конфигурации 1C Бухгалтерия 2.0 забирать список выставленных счетов и отправлять на некий сайт.
Читать далее
Ускоряем Django: View на С
Иногда требуются ресурсоемкие вычисления, и узким местом становится именно питон. Тогда на помощь приходит код написанный на C/С++
К счастью питон-модули пишутся довольно просто, и документация с примерами есть на официальном сайте. Никакой америки я сейчас не открою, и если вы когда-нибудь сталкивались с написанием модуля для питона — далее можно не читать — все довольно примитивно.
PyCharm 2.7
Тихо и незаметно вышел PyCharm 2.7
Добавилось:
- Проверка на PEP8
- Поддержка Django 1.5
- Вроде как допилина проверка синтаксиса LESS
- Допилен рефакторинг
Ну и еще кое-что: www.jetbrains.com
А теперь субъективно:
Django: POST
Тут все предельно просто, параметры POST-запроса парсятся и услужливо складываются в словарь POST объекта request, который всегда передается первым параметром в любой view.
Пример.
Форма
<form method="POST" action="/hello"> <label>Name:</label><input type="text" name="name" /> <input type="submit" /> </form> |
view обрабатывающий URL /hello:
@csrf_exempt # глушилка защиты CSRF, об этом ниже def hello(request): text = "" if "name" in request.POST: text = u"Параметр POST передан: привет %s" % request.POST['name'] else: text = u"Параметр POST не передан" return HttpResponse(text) |
Django. Передача GET-параметров
В продолжении Личное: Django. От простого
Научим приложение main здороваться с конкретным человеком. Для этого нужно в представление сообщить имя этого человека: модифицируем наше представление:
def hello(Response, name='World'): return HttpResponse("Hello %s!" %name) |
Теперь функция представления принимает один необязательный аргумент name
Добавим привязку в urls.py
url(r'^(\w+)$', 'main.views.hello'), |
Подробнее с регулярными выражениями можно познакомиться в документации на Python http://docs.python.org/2/library/re.html
В случае совпадения URL с данным регулярным выражением, Django вытащит группу указанную в скобках \w+ в качестве второго параметра функции представления: например запрос
http://127.0.0.1:8000/User
приведет к вызову
hello(Request,"User") |
И страничка поздоровается c User:
Hello User!