Antipattern settings.py



рд╣реИрдмрд░рдкрд┐рдЯреЛрдирд░реНрд╕ рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рд╕рдордп-рд╕рдордп рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкреИрдЯрд░реНрди рдЖрддреЗ рд╣реИрдВ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдХрдИ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЕрдм рдореИрдВ "рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╣реИрдВ" рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ Django рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреАред рдореИрдВ рд╣рд░ рдмрд╛рд░ рдФрд░ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдорд┐рд▓рд╛, рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рд╣реА рдХрд╣рд╛рдиреА рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реИрдВ: рдПрдХ рдмрдбрд╝рд╛ рдХреЛрдб рдЖрдзрд╛рд░, рдЫреЛрдЯреЗ, рд╕реБрдВрджрд░ рдШрдЯрдХ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдБ рдЖрдк рд╣реИрдВ: рд╕рднреА рдПрдХ рд╕рд╛рде рдордирдорд╛рдиреЗ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЬрд╛рджреВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЧреИрд░-рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд┐рд░рд╛рдВрдХред

рддреЛ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдШреГрдгрд┐рдд рдХреНрдпреЛрдВ рд╣реИред


рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рдореБрджреНрджреЛрдВ



рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдХрдо рд╕реЗ рдХрдо рддреАрди рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХрддрд░рдлрд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдпреБрджреНрдз рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдм рдХреБрдЫ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЖрдорддреМрд░ рдкрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк MongoDB рдХреЛ рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ my_project рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ my_project рдирд╛рдордХ DB рдХрд╛ рдЙрдкрдпреЛрдЧ my_project ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреВрдирд┐рдЯреЗрд╕реНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдбреАрдмреА рд▓реЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рд▓рдбрд╝рд╛рдХреВ рдбреЗрдЯрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рди unittests : рдЖрдЗрдП рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ unittests ред рдФрд░ рдЙрддреНрдкрд╛рджрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдореВрдВрдЧреВ рдХреЗ рддрд╣рдд рджрд┐рдП рдЧрдП рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдкреА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рддреЛ рдмрд╛рд╣рд░реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ, settings.MONGODB_ADDRESS рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗред settings.MONGODB_ADDRESS рд╕реЗ рдПрдордУрдВрдЧреЛрдбрдм_рдПрдбреАрдбреАрдЖрд░рдПрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рди рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдорддреМрд░ рдкрд░, рдПрдХ рд╡реВрдбреВ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрдд рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ __import__ , __dict__ , vars() , try/except ImportError , рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рдкреВрд░рдХ рдФрд░ рдУрд╡рд░рд▓реИрдк рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ settings_local.pyред

рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИ _local.py рд╣рд╛рд░реНрдбрдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЗрд╡рд▓ рд▓реЙрдиреНрдЪ рдХреЗ рд╕рдордп рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдпреВрдирд┐рдЯреАрд╕реНрдЯ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЭрдВрдЭрд░реА рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЬрд╝реЗрди рдСрдл рдкрд╛рдпрдерди рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред

рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб



рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд╛рдИ-рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рднрдВрдбрд╛рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдбрд░рд╛рд╡рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреВрд░реЗ рдкреИрдЯрд░реНрди, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╢реБрд░реВ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИ: тАЬрд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реАрдПрдлрдЬреА рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдпрджрд┐ рдЖрдк рдЕрдЬрдЧрд░ рдкрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдФрд░ рдЕрдзрд┐рдХ рдЕрд╡рд╕рд░ рд╣реИрдВ! " рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдорд╛рдореВрд▓реА рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓, рд╕рдорд╛рдзрд╛рди рдмрдЧрд╝рд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рд╕реНрдирд┐рдкреЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 # settings.py BASE_PATH = os.path.dirname(__file__) PROJECT_HOSTNAME = 'localhost' SOME_JOB_COMMAND = '%s/bin/do_job.py -H %s' % (BASE_PATH, PROJECT_HOSTNAME) # settings_production.py PROJECT_HOSTNAME = 'my-project.ru' 


рдХреНрдпрд╛ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рд╣рдордиреЗ SOME_JOB_COMMAND рдХреЗ рдХреБрд▓ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдбреНрд░рдо рдкрд░ PROJECT_HOSTNAME рдорд╛рди рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ред рд╣рдо рдУрд╡рд░рд▓реИрдк рдХреЗ рдмрд╛рдж SOME_JOB_COMMAND рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рджрд╛рдБрдд SOME_JOB_COMMAND рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ: BASE_PATH рдлрд┐рд░, рдПрдХ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВред рдЗрд╕реЗ рднреА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ? рдХреНрдпрд╛ рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдмрд╕ рдХрдард┐рди-рд╕реЗ- ImportError рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдирдП рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдордХреНрдЦрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдЯрд▓реЗрдЯ рдХреЛ рдЕрд▓рдЧ рд╕реЗ: рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореВрд▓ рдорд╛рди, рдкреА-рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдЙрдЪреНрдЪ рдпреБрдЧреНрдорди



рдПрдХ рдЕрдЪреНрдЫреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЫреЛрдЯреЗ рдХреНрдпреВрдмреНрд╕ рдореЗрдВ рддреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреНрдпреВрдм рдХреЛ рдПрдХ рдкреВрд░реНрдг-рдУрдкрди рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреАрдердм рдкрд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬрдм рд╕рдм рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ BUT рдХреЗ рд╕рд╛рде: "рдХреГрдкрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ FOO_BAZ рдФрд░ FOO_QUX рд╕реЗрдЯрд┐рдВрдЧ FOO_BAR , FOO_BAZ рдФрд░ FOO_QUX " рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдЬрдм рдХреБрдЫ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпрд╣ рдмреЗрддреБрдХрд╛рдкрди рдЖрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЦреБрдж рдХреЛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ VKontakte API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ VKontakteProfileCache рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ, рдЬреЛ settings.VK_API_KEY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред VKontakteProfileCache рдФрд░ settings.VK_API_SECRET ред рдорд╛рдереЗ рдореЗрдВ VK_API_SECRETред рдЦреИрд░, рд╡рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ, рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрдИ VKontakte рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣ рд╡рд╣ рд╣реИ, VKontakteProfileCache рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝реА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗред

рдЗрд╕рд▓рд┐рдП, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╛рдордВрдЬрд╕реНрдпрдкреВрд░реНрдг рдФрд░ рдЕрдзрд┐рдХ рд╕рдореАрдЪреАрди рд╣реИред рд╕рднреА рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рджреЗрдВ, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдирд╣реАрдВред рдФрд░ рдХреЛрдб рдХреА рддрд░рд╣ рд╕рдмрд╕реЗ рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рджреЗрдВ if __name__ == '__main__' рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдФрд░ рд╡рд╣ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдВ рд╕реЗ рдорд┐рд▓рд╛ - рдЙрдирдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдорд╕реНрдпрд╛рдПрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЛ рднреА рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЖрдкрдХреЛ рдХрд┐рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╣рдо рдмрдирд╛рддреЗ рд╣реИрдВред

рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди



рдЗрд╕рд▓рд┐рдП, "settings.py" рдкреИрдЯрд░реНрди рдореИрдВрдиреЗ рдХреАрдЪрдбрд╝ рдбрд╛рд▓рд╛ред рдореИрдВ рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдзрдиреНрдпрд╡рд╛рджред рдЕрдм рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдореИрдВрдиреЗ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рд░рд╣рд┐рдд рдкрд╛рдпрд╛ред

рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдЖрдИ-рд╕реНрдЯрд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░рдУрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдЗрд╕рдореЗрдВ рдорд╛рдирдХ рд╡рд┐рдиреНрдпрд╛рд╕рдХрд░реНрддрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдореГрджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реНрдХреЗрдб рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдо рд╕рднреА рд╕рдВрднрд╡ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдПрдХ рдЙрдЪрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ default_settings.cfg рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо config_from_files configure_from_files() , config_for_unittests configure_from_files() рдЬреИрд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде utils.config рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред /etc/my-project.cfg configure_from_files() рдПрдХ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИ: default_settings.cfg , ~/.my-project.cfg , /etc/my-project.cfg рдФрд░ рд╢рд╛рдпрдж рдХрд╣реАрдВ рдФрд░ред рдпрд╣ рд╕рдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдпрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреИрдпрд╛рд░ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рд╡реЗ рд╕реАрдзреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдВрдзреЗрд░реЗ рдХреЛ рд╕рдордЧреНрд░ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЛ рдирдХрд╛рд░рддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЖрдордиреЗ-рд╕рд╛рдордиреЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВред

рд╢рд╛рдпрдж рдореИрдВрдиреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдЯреНрд░рд┐рдлрд╝рд▓" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд┐рдЦрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХрдо рд╕реЗ рдХрдо рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рджреВрд░ рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЛрдЪрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмреЗрд╣рддрд░, рдЖрд╕рд╛рди, рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдорд┐рд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/In115893/


All Articles