ФорумПрограммированиеPythonDjango → Django settings

Django settings

  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 12:32

    Последнее время не люблю велосипеды, но раз приходится кататься на чужом, то хотя бы колеса хочется круглые :-)

    Не для кого не секрет, что жанга крутая, но ее settings порой разрастаются до уровня хорошего такого куска кода ~ 500-800 строчек и найти в них (а тем более поменять kxakxakxa) что-то не представляется простой задачей.

    Пытался найти что-то адекватное из splitted settings, but have no luck.

    Итого родил вот такой "загрузчик" конфигурации.


    import inspect
    import pkgutil

    moduleweights = {
    'env': 1,
    'paths': 2
    }

    modules = [x[1] for x in pkgutil.walk_packages(__path__)]
    modules.sort(key=lambda x: moduleweights.get(x, 10000))

    print 'Loading project.settings:'
    for module in modules:
    print ' %s' % module

    for module_name in modules:
    module = __import__(module_name, globals(), locals(), [])
    for var_name, val in inspect.getmembers(module):
    if var_name.isupper():
    locals().update({var_name: val})

    try:
    # noinspection PyUnresolvedReferences
    from ..settings_local import *
    except ImportError:
    pass


    Как это сейчас выглядит


    Да и о доступе к "конфигурированной" части я тоже подумал, вот примерчик.

    import sys

    settings = sys.modules['project.settings']

    INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    )

    INSTALLED_APPS += (
    # 'django_extensions',
    'pygeoip',
    'floppyforms',
    'crispy_forms',
    'crispy_forms_foundation',
    'compressor',
    )

    INSTALLED_APPS += (
    'users',
    'project.portal',
    )

    if settings.DEBUG:
    # noinspection PyUnresolvedReferences
    INSTALLED_APPS += (
    'debug_toolbar.apps.DebugToolbarConfig',
    )


    в примере учавствует модуль project.settings, у меня все лежит в project относительно корня проекта.

    Готов к помидорам, а так же салатам и пруфлинкам на более адекватные settings-splitter'ы.

    {+++99+++}
    мм. чуть не забыл.

    Поддерживается подгрузка settings_local.py. пример

    import sys

    print 'I WAS LOADED KHA KHA KHA'

    settings = sys.modules['project.settings']
    if settings.DEBUG:
    print 'In debug mode'


    ну и примерчик лога загрузки

    Loading project.settings:
    env
    paths
    apps
    assets
    cache
    compressor
    crispy
    db
    emails
    facebook
    geoip
    i18n
    middleware
    paypal
    portal
    security
    template
    urls
    wsgi
    I WAS LOADED KHA KHA KHA
    In debug mode
    Сапожник без сапог
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 12:43, спустя 11 минут

    както по уебански у нас выглядит типографика и bb парсер ...

    залил на гист, надо гист ембедер сделать будет, помочь пыхе так сказать)

    https://gist.github.com/phpdude/9310482

    Сапожник без сапог
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 12:50, спустя 6 минут 42 секунды

    Ставлю, что Адворд скажет, что ебашит всё в один файл и его не парит.
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 12:58, спустя 8 минут 14 секунд

    и сюда) djangosnippets: Django Settings Splitter & Local Settings loader [djangosnippets.org]

    Спустя 30 сек.

    Ставлю, что Адворд скажет, что ебашит всё в один файл и его не парит.

    @vasa_c, это точно)) но это не мой путь, я люблю чистоту.

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 15:47, спустя 2 часа 48 минут 41 секунду

    Ставлю, что Адворд скажет, что ебашит всё в один файл и его не парит.

    @vasa_c, именно так, меня не парит. Однако в наших проектах все иначе, конфиги должны меняться клиентами и т.п., поэтому не все в settings.py

    p.s. Уже обсуждали что сеттингсы в джанге это просто глобал скоп, который должен был быть переписан уже давно.

    p.s.s. Также на пихе mathete уже делал попытку сделать сетиингсы модуле-зависимомыми и тогда бы файл настроек не был таким большим

    Спустя 80 сек.

    Вот пруф http://pyha.ru/forum/topic/7984, в котором дуд сам говорит по-началу что это все незачем и одного файла достаточно, нет?

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 15:51, спустя 4 минуты 21 секунду

    @adw0rd, я повзрослел)))

    p.s.s. Также на пихе mathete уже делал попытку сделать сетиингсы модуле-зависимомыми и тогда бы файл настроек не был таким большим

    это тож не совсем необходимо, ведь модули и сейчас имеют свои defaults. а много ли модулей надо конфигурировать?

    я пока вот это решение горяченькое поюзаю, пока жангофреймворк не придумает чо нить более крутое)))

    @vasa_c, именно так, меня не парит. Однако в наших проектах все иначе, конфиги должны меняться клиентами и т.п., поэтому не все в settings.py

    ну тут, частный случай) бывает и такое. кстати какое решение используешь? или сам писал ?

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 15:54, спустя 2 минуты 50 секунд

    Самописное, подробности к mathete, NDA все-дела)

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 15:57, спустя 2 минуты 23 секунды

    @adw0rd, понятн)

    Сапожник без сапог
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 10 марта 2014 г. 1:07, спустя 7 дней 8 часов 10 минут

    чуток порефакторил, щас он выглядит more python way (кортеж вместо словаря) :)

    https://gist.github.com/phpdude/9310482?file=__init__.py

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 10 марта 2014 г. 2:20, спустя 1 час 13 минут 48 секунд

    DEBUG = not 'http/mywebsite.com/' in os.path.realpath(__file__)
    

    А чего так странно пишешь? Почему не not in?

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 10 марта 2014 г. 5:41, спустя 3 часа 20 минут 48 секунд

    @adw0rd, черезе uwsgi у меня почему то __file__ = "." (там про папку была речь видимо, видимо тут просто ./filename) :D

    или путь ли не помню, поэтому постоянно такие конструкции использую, чтобы "наверняка".

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 10 марта 2014 г. 8:28, спустя 2 часа 46 минут 21 секунду

    Так у тебя все тоже самое получится по логике, но unpythonic

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 10 марта 2014 г. 8:50, спустя 22 минуты 7 секунд

    @adw0rd, :D

    но в "." я не смогу определить env в котором нахожусь, ага?)

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 10 марта 2014 г. 14:12, спустя 5 часов 22 минуты 6 секунд

    Да я про точку вообще не говорил, я про not in

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 10 марта 2014 г. 14:29, спустя 17 минут 17 секунд

    Да я про точку вообще не говорил, я про not in

    @adw0rd, тьфу блин, все понял. это я с пхп еще не могу привыкнуть :-)

    в пхп то нельзя же так, там отрицание "условие", отрицание внутри условия не бывает))

    побаиваюсь подкожно это использовать, книжок умных не читаю ж, я и питон то не учил)))) по джанге разве что чуток)))

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!