2013-07-23 7 views
0

Я написал общую структуру в python для определенного типа задач. Это веб-сервер, который обслуживает разные запросы и операции. Эта структура может использоваться многими проектами, и каждый из них имеет другой набор правил проверки. Прямо сейчас, я просто обновляю свой сценарий для каждого проекта.Советы по дизайну Python

Я думаю об экстернализации этой части валидации, как мне это сделать? Валидации - это больше, чем просто проверка содержимого поля; Я думаю о наличии файла конфигурации, который отображает incoming request <-> validationModule что-то вроде /site1/a/b.xml=validateSite1.py и импортирует этот модуль в условии if, если запрос для site1. Поэтому у меня будут общие сценарии среды + индивидуальные скрипты для каждого сайта.

Есть ли более чистый способ сделать это?

ответ

1

Я думаю, что было бы лучше использовать сам Python в качестве сопоставления верхнего уровня из путей URL-адресов к модулям проверки. Конфигурация может выглядеть следующим образом:

import site1 
import site2 
def dispatch(uri): 
    if uri.startswith('/site1/'): 
     return site1.validate(uri) 
    elif uri.startswith('/site2/): 
     return site2.validate(uri) 

Этот простой пример может побудить вас к «абстрактной» его в более «общей платформы», которая превращает строки в именах файлов использовать в качестве сценариев проверки. Вот некоторые из преимуществ использования вышеперечисленного:

  1. Производительность: модули сайта импортируются только один раз, мы не ищем имена файлов в запросе.
  2. Гибкость: если позже вы решите, что логика диспетчеризации более сложна, вы можете легко использовать произвольный код Python для решения этой проблемы. Никогда не будет необходимости расширять вашу систему сопоставления - только файлы конфигурации, требующие большей сложности.
  3. Единый язык.
+0

Да, этот метод имеет большую гибкость; я думаю, что количество модулей импорта будет расти, импорт нужно отслеживать, удалять устаревшие в будущем и т. д. – Rnet

Смежные вопросы