рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдг рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ

рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ Djang рдкрд░ рдПрдХ рд╕рд╛рдЗрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпреЗ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рд░рд▓ рдкреГрд╖реНрда рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЦреБрдж рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рдХрд╛рдо рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд╛рд░реНрдб рд╕рд╛рдЗрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ?)ред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЬрдирддрд╛ рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ "рдХрдо рд╕реНрдХреНрд░рд┐рдмрд▓!" рдЬрд▓реНрджреА рдХрд░реЛ, рдбреАрдмрдЧ рдХрд░реЛ! тАЭDjango рдкрд░ рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрдЯред

рдпреЗ 2 рдкреИрдЯрд░реНрди рд╣реИрдВ:



рд╕реНрдерд╛рдкрдирд╛



рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдФрд░ Django рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

  $ hg рдХреНрд▓реЛрди ssh: //hg@bitbucket.org/siberiano/fastdev-django my_new_project
 $ cd my_new_project
 $ rm .hg / hgrc
 $ рдЕрдЬрдЧрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк -рдбрд┐рд╕реНрдЯрд╡рд░реНрд▓реНрдб
 $ рдмрд┐рд▓реНрдбрдЖрдЙрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ 


( BitBucket рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЗрдЬред )

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

makefile


рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рдмрдЬрд╛рдп, рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореЗрдХрдлрд╛рдЗрд▓ рдмрдирд╛рдпрд╛ рдФрд░ рдХрдорд╛рдВрдб рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрдХрд▓рд┐рдд рдХреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдирдЖрдЙрдЯ рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдбрдЖрдЙрдЯ рдФрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рдмрд╛рдж рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдорд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛:



buildout


zc.buildout рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ Zope рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Pylons рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ ~ / .buildрдЖрдЙрдЯ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ (рд╕рд╛рдЗрдЯ рдкреИрдХреЗрдЬ) рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдПрдХ рдХрдбрд╝реА рд░рдЦреЛ)ред

рдмрд┐рд▓реНрдбрдЖрдЙрдЯ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рд▓рдЪреАрд▓реА рдкреНрд░рдгрд╛рд▓реА рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╡рд┐рдХрд╕рд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ рдФрд░ рдкрд╛рдЗрдлреНрд▓реЗрдХреНрд╕ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде Djanga рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  [Buildout]
 рднрд╛рдЧреЛрдВ =
     Django
     pyflakes
 
 [Django]
 рд░реЗрд╕рд┐рдкреА = djangorecipe
 рдЕрдВрдбреЗ = 
     IPython
     django_extensions

 [Pyflakes]
 рдиреБрд╕реНрдЦрд╛ = zc.recipe.egg
 рд▓рд┐рдкрд┐рдпрд╛рдБ = рдЪрд┐рддрд╛рдПрдБ
 рдЕрдВрдбреЗ = pyflakes
 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐-рдЕрдВрдХ = pyflakes = pkg_resources: run_script
 рддрд░реНрдХ = 'pyflakes', 'pyflakes'


рдмрд┐рд▓реНрдбрдЖрдЙрдЯ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдЗрдЯ рд╕реЗ djangorecipe рдФрд░ zc.recipe.egg рдиреБрд╕реНрдЦрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

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

рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣рдореЗрдВ рдХреБрдЫ рд╕рд┐рд░рджрд░реНрдж рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ:



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ 2 рдЯреАрдореЛрдВ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ:

  $ рдЕрдЬрдЧрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк -рдбрд┐рд╕реНрдЯрд╡рд░реНрд▓реНрдб
 $ рдмрд┐рди / рдмрд┐рд▓реНрдбрдЖрдЙрдЯ


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддреИрдпрд╛рд░ рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП Django рд╕рд░реНрд╡рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ [рдХрдорд╛рдВрдб] рдХреЗ рдмрдЬрд╛рдп

  $ рдмрд┐рди / django рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ 0.0.0.0:8000 


рдмреИрдЯрд░реА


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

  $ рдмрд┐рди / pyflakes my_new_script.py
 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░: test_string, рдкрдВрдХреНрддрд┐ 2
 рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдпреБрдХреНрдд рдЪрд░: рдПрдХ рдФрд░_рд╡рд╛рд░, рдкрдВрдХреНрддрд┐ 5 


(2 рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдЬреЛ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рдереАред рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдмрд┐рдирд╛, рд╣рдо рджреЛ рдмрд╛рд░ рд╕рд╛рдЗрдЯ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдмрдЧ рджреЗрдЦреЗрдВрдЧреЗред)

рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдбреАрдмрдЧрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреА рд╣рдордиреЗ рдЯреАрдо рдореЗрдВ рдЬрд╛рдБрдЪ рдХреА, рдЙрдирдореЗрдВ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ PuDB рд╣реИ , рдпрд╣ рдПрдХ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдореЛрдб рдореЗрдВ рдорд┐рдбрдирд╛рдЗрдЯ рдХрдорд╛рдВрдбрд░ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ 80 рдХреЗ рджрд╢рдХ рдХреЗ рдкреБрд░рд╛рдиреЗ QBasic / Borland рдореАрдбрд┐рдпрд╛ рд╕реЗ рдорд┐рд▓рддрд╛ рдЬреБрд▓рддрд╛ рд╣реИред

PuDB

рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдбрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬрд╣рд╛рдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  рдЖрдпрд╛рдд рдкреБрдбрдм;  pudb.set_trace ()


рдбрд┐рдмрдЧрд░ рдХреЗ рдЕрдВрджрд░ рдмрд╣реБрдд рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╣реИ (Ctrl + P), рдФрд░ рдЗрд╕рд╕реЗ рдЖрдк IPyon рдкрд░ рдбрд┐рдмрдЧ рдХрдВрд╕реЛрд▓ рдореЗрдВ рднреА рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкрд╛рдпрдерди рдХрдВрд╕реЛрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдХреЛ рд╕рдм рдХреБрдЫ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдмрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ред

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

рдпрджрд┐ рдкреЗрдЬ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдП рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЖрдорддреМрд░ рдкрд░, рдЕрдЧрд░ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



рдпрджрд┐ Werkzeug рдХреЛ 5 рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдорд░рдгреЛрдкрд░рд╛рдВрдд рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрдВрд╕реЛрд▓ рдХреЛ рд╕реАрдзреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░! рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдпрджрд┐ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдВрдШреАред

  $ рдмрд┐рди / pep8 my_new_script.py
 'рдЖрдпрд╛рдд *' рдмрд╣реБрдд рд╣реА рдЦрд░рд╛рдм рд╢реИрд▓реА рд╣реИред  рдкрдВрдХреНрддрд┐ реи
 рдЕрдкреЗрдХреНрд╖рд┐рдд 2 рд░рд┐рдХреНрдд рд░реЗрдЦрд╛рдПрдБ, 1. рдкрдВрдХреНрддрд┐ 5ред


рдПрдЪрдПрдПрдордПрд▓, рд╕рд╛рд╕, OOCSS

рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЕрдХреНрд╕рд░ рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛, рдЬрд┐рд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдЖрдИрдбреАрдИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рддреЗрдЬ рдХрд░ рджреЗрддрд╛ рд╣реИред

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

  - рд▓реЛрдб i18n рд╕реЗрдХ
 % html
     % рд╕рд░
         % рдЙрдкрд╛рдзрд┐
             - рдмреНрд▓реЙрдХ рд╢реАрд░реНрд╖рдХ
                 Django рдореЗрдВ рд╕реНрдкреАрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ

     % рд╢рд░реАрд░
         # menu.page.oldSchool
             - рдмреНрд▓реЙрдХ рдореЗрдиреВ
                 .line.title_bar
                     .unit.size1of2
                         % a.site_logo {'href': "/"} Django рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕
                
                     .unit.size1of2.lastUnit
                         - 'language_selector.haml' рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
    
         #body
             - рдмреНрд▓реЙрдХ рдмреЙрдбреА


рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  {% рд▓реЛрдб i18n рд╕реЗрдХ%}
 <Html>
     <Head>
         <Title>
             {% рдмреНрд▓реЙрдХ рд╢реАрд░реНрд╖рдХ%}
                 Django рдореЗрдВ рд╕реНрдкреАрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ
             {% рдПрдВрдбрдмреНрд▓реЙрдХ%}
         </ Title>
     </ Head>
     <Body>
         <div id = "menu" class = "page oldSchool">
             {% рдмреНрд▓реЙрдХ рдореЗрдиреВ%}
                 <div class = "line title_bar">
                     <div class = "unit size1of2">
                         <a class="site_logo" href="/"> Django рдореЗрдВ рддреЗрдЬрд╝ рд╡рд┐рдХрд╛рд╕ </a>
                     </ Div>
                     <div class = "unit size1of2 lastUnit">
                         {% рдореЗрдВ 'language_selector.haml'% рд╢рд╛рдорд┐рд▓ рд╣реИрдВ}
                     </ Div>
                 </ Div>
             {% рдПрдВрдбрдмреНрд▓реЙрдХ%}
         </ Div>
    
         <div id = "body">
             {% рдмреНрд▓реЙрдХ рдмреЙрдбреА%}
             {% рдПрдВрдбрдмреНрд▓реЙрдХ%}
         </ Div>
     </ Body>
 </ Html>


рдПрдХ рдмрдВрдж рдЯреИрдЧ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХрд╛ рд▓реЗрдЖрдЙрдЯ рдХрд┐рддрдиреА рдмрд╛рд░ рдЯреВрдЯ рдЧрдпрд╛? HAML рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рдмрдВрдж рдЯреИрдЧ рдирд╣реАрдВ рд╣реИрдВред рдЯреИрдЧ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЯреИрдм рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╕реНрддрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ - рдЗрд╕рдореЗрдВ 1.5 рдЧреБрдирд╛ рдХрдо рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдПрдХ рдЪреМрдерд╛рдИ рдХрдо рдкрддреНрд░ рд╣реИрдВред рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдиреБрдХрд╕рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП JSON рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ HamlPy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ , рдЬрд┐рд╕реЗ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, Django рдЯреИрдЧ рдФрд░ рд╕рд╛рджреЗ HTML рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ Haml рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  <рд╡рд┐рдХрд▓реНрдк {% рдпрджрд┐ option.selected%} рдЪрдпрдирд┐рдд {% endif%}> {{рд╡рд┐рдХрд▓реНрдк.рд╡рд╛рдпреБ}} </ рд╡рд┐рдХрд▓реНрдк>


Haml CSS рд╕рдордХрдХреНрд╖ Sass рд╣реИ ред рдПрд╕рдПрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ: рдПрд╕рд╕реАрдПрд╕рдПрд╕ (рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ) рдФрд░ рдПрд╕рдПрдПрд╕рдПрд╕ (рдЯреИрдм рдХреЗ рд╕рд╛рде рд╣реИрдо рдФрд░ рдкрд╛рдпрдерди рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ)ред рдореИрдВ рдмрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рд╕реИрд╕ рд╕реЗ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд▓рд╛рдн рд╕рднреА рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕рдВрдкреАрдбрд╝рди рд╣реИ, рдЬреИрд╕реЗ * -рд▓рд╛рдЗрдирд░-рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ, рдПрдХ рдХреЙрд▓ рдореЗрдВ:

  @рдкреЛрд░реНрдЯ рдмреЛрд░реНрдмрди
     .action
         + рд▓реАрдирд┐рдпрд░-рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ (рд╢реАрд░реНрд╖, # 6d33f2 0%, # 54a3ee 50%, # 3690f0 51%, # 1e69de 100%)


рдпрд╣ рд╕рднреА рдврд╛рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (-moz -..., -o -..., -webkit- ... рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рд╛рд╕ рднрд╛рд╖рд╛ рд▓реВрдкреНрд╕ рдФрд░ рд╕рд╢рд░реНрдд рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ @ рдЕрдЧрд░ ... рдФрд░ ред рдПрдХ рд╕рдорд╛рди рдХрдо-рд╕реАрдПрд╕рдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрд╕реЗ django-рдХрдВрдкреНрд░реЗрд╕рд░ рд╕реЗ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реВрдк рдЬреИрд╕реЗ рд╣реЗрд░рдлреЗрд░ рдФрд░ рддрд░реНрдХреЛрдВ рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред

рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  .class1
         рдлрд╝реЙрдиреНрдЯ-рд╡рдЬрди: рдмреЛрд▓реНрдб
         > .class2
             рдлрд╝реЙрдиреНрдЯ-рд╢реИрд▓реА: рдЗрдЯреИрд▓рд┐рдХ


рдкрд░рд┐рдгрд╛рдо:

  .class1 {
         рдлрд╝реЙрдиреНрдЯ-рд╡рдЬрди: рдмреЛрд▓реНрдб;  }
    
     .class1> .class2 {
         рдлрд╝реЙрдиреНрдЯ-рд╢реИрд▓реА: рдЗрдЯреИрд▓рд┐рдХ;  }


рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рд╕реАрдПрд╕рдПрд╕ рдирд┐рдХреЛрд▓ рд╕реБрд▓рд┐рд╡рди рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдЙрди рдирд┐рдпрдореЛрдВ рдкрд░ рдЕрдВрдХреБрд╢ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реА рдЬреЛ рдореЛрд▓реНрдб рдХреА рддрд░рд╣ рдмрдврд╝ рд░рд╣реЗ рдереЗ, рд╕рдВрдпреБрдХреНрдд рдФрд░ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рдХреЙрдореНрдкреИрдХреНрдЯ рд▓реЗрдЖрдЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк OOCSS рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдЙрд╕рдХреЗ рднрд╛рд╖рдг (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдФрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд░реНрдХрдкреАрд╕ рд╣реИрдВред рддрд╛рд▓рд┐рдХрд╛рдПрдБ (HAML рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ):

  .line
     .unit.size1of3 рдмрд╛рдПрдВ рдХреЙрд▓рдо
     .unit.size1of3 рдХреЗрдВрджреНрд░ рд╕реНрддрдВрдн
     .unit.size1of3.lastUnit рд╕рд╣реА рдХреЙрд▓рдо


"рдореАрдбрд┐рдпрд╛ рдмреНрд▓реЙрдХ", рдпрд╛рдиреА рдмрд╛рдИрдВ рддрд░рдл рдХреА рддрд╕реНрд╡реАрд░ рдФрд░ рд╡рд╣ рдЯреЗрдХреНрд╕реНрдЯ рдЬреЛ рджрд╛рдИрдВ рдУрд░ рдХреА рддрд╕реНрд╡реАрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рдмрд╣рддрд╛ рд╣реИ:

  .media
     % img.img {'src': '{{message.author.picture.url}}' '} /
     .bd = message.text


рдПрдХ рдЦрд╛рд▓реА рдкреГрд╖реНрда рдЯреЗрдореНрдкрд▓реЗрдЯ, рдХрдВрдЯреЗрдВрдЯ рдмреНрд▓реЙрдХ (рд╣реЗрдбрд░, рдмреЙрдбреА рдФрд░ рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдЖрдпрдд) рднреА рд╣реИред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, OOCSS рдХреЛ рдПрдХ рдЙрдк-рднрдВрдбрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рдордп-рд╕рдордп рдкрд░ GitHub рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдХреНрдпрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ


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

рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ:



рдореБрдЭреЗ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрд╛рдВрдЯрд╛ рдХрд░рдиреЗ, рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

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

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


All Articles