рдЧрд╛рдЗрдб: рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рд░рд╛рдорд┐рдб - рднрд╛рдЧ 4

рднрд╛рдЧ 3: рдЗрдХрд╛рдИ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг, рдЧрд┐рд░рдЧрд┐рдЯ рдореЗрдВ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб

рдЪрд░рдг 04: рдлреНрд░реЗрдорд╡рд░реНрдХ рджреЗрдЦреЗрдВ

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

рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬ рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЗрд╕ рдЪрд░рдг рдореЗрдВ, рд╣рдо рд╕рд╛рдЗрдЯ рдореИрдк рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ:
/
/about.html
/acme
/people
/
/about.html
/acme
/people
... рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ URL рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЕрдзрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред

рд▓рдХреНрд╖реНрдпреЛрдВ
рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реИ
рдЪрд░рдгреЛрдВ

$ cd ../../creatingux; mkdir step04; cd step04

(рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд) рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ - step04/application.py :
wsgiref.simple_server рдЖрдпрд╛рдд рдореЗрдХ_рд╕реЗрд╡рд░ рд╕реЗ

рдкрд┐рд░рд╛рдорд┐рдб.рдХреЙрдиреНрдлрд┐рдЧ рдЖрдпрд╛рдд рд╡рд┐рдиреНрдпрд╛рд╕рдХ рд╕реЗ

def рдореБрдЦреНрдп ():
рд╡рд┐рдиреНрдпрд╛рд╕ = рд╡рд┐рдиреНрдпрд╛рд╕рдХрд░реНрддрд╛ ()
рд╡рд┐рдиреНрдпрд╛рд╕ ред рд╕реНрдХреИрди ( "рд╡рд┐рдЪрд╛рд░" )
app = config ред make_wsgi_app ()
рд╡рд╛рдкрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди

рдЕрдЧрд░ __name__ == '__main__' :
рдПрдкреНрд▓рд┐рдХреЗрд╢рди = рдореБрдЦреНрдп ()
рд╕рд░реНрд╡рд░ = make_server ( '0.0.0.0' , 8080 , рдРрдк)
рд╕рд░реНрд╡рд░ ред рд╕реЗрд╡рд╛_рд╕реЗрд╡рд░ ()
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣рд╛рдБ рднреА step04/views.py :
рдкрд┐рд░рд╛рдорд┐рдб рд╕реЗ.рд╡реНрдпреВ рдЖрдпрд╛рдд view_config

@view_config (рд░реЗрдВрдбрд░рд░ = "index.pt" )
def index_view (рдЕрдиреБрд░реЛрдз):
рд╡рд╛рдкрд╕реА {}

@view_config (рд░реЗрдВрдбрд░рд░ = "about.pt" , рдирд╛рдо = "about.html" )
about_view (рдЕрдиреБрд░реЛрдз) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ :
рд╡рд╛рдкрд╕реА {}

@view_config (рд░реЗрдВрдбрд░рд░ = "company.pt" , рдирд╛рдо = "acme" )
def company_view (рдЕрдиреБрд░реЛрдз):
рд╡рд╛рдкрд╕реА { "рдХрдВрдкрдиреА" : рдХрдВрдкрдиреА, "рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ" : рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ}

@view_config (рд░реЗрдВрдбрд░рд░ = "people.pt" , рдирд╛рдо = "рд▓реЛрдЧ" )
def__
рд╡рд╛рдкрд╕реА { "рдХрдВрдкрдиреА" : рдХрдВрдкрдиреА, "рд▓реЛрдЧ" : рд▓реЛрдЧ}

# рдбрдореА рдбреЗрдЯрд╛
рдХрдВрдкрдиреА = "рдПрд╕реАрдПрдордИ, рдЗрдВрдХред"

рд▓реЛрдЧ = [
{ 'рдирд╛рдо' : 'sstanton' , 'рд╢реАрд░реНрд╖рдХ' : 'Susan Stanton' },
{ 'рдирд╛рдо' : 'рдмреАрдмрд░' , 'рд╢реАрд░реНрд╖рдХ' : 'рдмреЙрдм рдмрд╛рд░реНрдХрд░' },
]

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ = [
{ 'рдирд╛рдо' : 'рд╕рд╛рдЗрд▓реЛрд▓реЙрдЬрдиреНрд╕' , 'рд╢реАрд░реНрд╖рдХ' : 'рд╕рд┐рд▓реА рд╕реНрд▓реЛрдЧрдиреНрд╕ ' },
{ 'рдирд╛рдо' : 'рдЕрд░реНрдерд╣реАрдирддрд╛' , 'рд╢реАрд░реНрд╖рдХ' : 'рдЕрд░реНрдерд╣реАрди рдорд┐рд╢рди' },
]
рдФрд░ рдпрд╣рд╛рдБ step04/index.pt :
<Html>
<Head>
<рд╢реАрд░реНрд╖рдХ> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ - рд╣реЛрдо </ рд╢реАрд░реНрд╖рдХ>
</ Head>
<Body>
<Ul>
<li> <a href= "/"> рдШрд░ </a> </ li>
<li> <a href= "/about.html"> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ </a> </ li>
<li> <a href= "/acme"> ACME, Inc. </a> </ li>
<li> <a href= "/people"> рд▓реЛрдЧ </a> </ li>
</ Ul>
<h1> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ - рд╣реЛрдо </ h1>
</ Body>
</ Html>
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣рд╛рдБ step04/about.pt :
<Html>
<Head>
<рд╢реАрд░реНрд╖рдХ> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ - рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ </ рд╢реАрд░реНрд╖рдХ>
</ Head>
<Body>
<Ul>
<li> <a href= "/"> рдШрд░ </a> </ li>
<li> <a href= "/about.html"> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ </a> </ li>
<li> <a href= "/acme"> ACME, Inc. </a> </ li>
<li> <a href= "/people"> рд▓реЛрдЧ </a> </ li>
</ Ul>
<h1> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ - рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ </ h1>
<p> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрди рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ
рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ,
рд╕реНрд╡рд╛рдпрддреНрдд рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдкреВрд▓ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ред </ P>
</ Body>
</ Html>
рдпрд╣рд╛рдБ step04/company.pt :
<Html>
<Head>
<рд╢реАрд░реНрд╖рдХ> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ - рд▓реЛрдЧ </ рд╢реАрд░реНрд╖рдХ>
</ Head>
<Body>
<Ul>
<li> <a href= "/"> рдШрд░ </a> </ li>
<li> <a href= "/about.html"> рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ </a> </ li>
<li> <a href= "/acme"> ACME Inc. </a> </ li>
<li> <a href= "/people"> рд▓реЛрдЧ </a> </ li>
</ Ul>
<h1> рд▓реЛрдЧ </ h1>
<Ul>
<рд▓реА рдкреНрд░рддрд┐рднрд╛: рдмрд╛рд░-рдмрд╛рд░ = "рд╡реНрдпрдХреНрддрд┐ рд▓реЛрдЧ" >
<a href= "> рд░рд┐рдЯреЗрд▓рд░реНрд╕.рдирд╛рдордирд┐рд░реНрджреЗрд╢рдиред $ {person.title} </a>
</ Li>
</ Ul>
</ Body>
</ Html>
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрд╣рд╛рдБ step04/tests.py :
рдЖрдпрд╛рдд unittest

рдХреНрд▓рд╛рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рд╡реНрдпреВрдпреВрдирд╛рдЗрдЯрд┐рдЯреНрд╕ (рдпреВрдиреАрдЯреЗрд╕реНрдЯ ред рдЯреЗрд╕реНрдЯрдХреИрд╕реЗ):
def test_hello_view ( рд╕реНрд╡ ):
рджреГрд╢реНрдп рд╕реЗ рдЖрдпрд╛рдд index_view
рдкрд░рд┐рдгрд╛рдо = index_view ({})
рд╕реНрд╡ ред рдореБрдЦрд░ ( рд▓реЗрди (рдкрд░рд┐рдгрд╛рдо ред рдЪрд╛рдмрд┐рдпрд╛рдБ) (), 0 )

def test_about_view ( рд╕реНрд╡рдпрдВ ):
рджреГрд╢реНрдпреЛрдВ рд╕реЗ рдЖрдпрд╛рдд_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд░рд┐рдгрд╛рдо = about_view ({})
рд╕реНрд╡ ред рдореБрдЦрд░ ( рд▓реЗрди (рдкрд░рд┐рдгрд╛рдо ред рдЪрд╛рдмрд┐рдпрд╛рдБ) (), 0 )

def test_company_view ( рд╕реНрд╡ ):
рдЖрдпрд╛рдд рд╕реЗ рд╡рд┐рдЪрд╛рд░ company_view
рдкрд░рд┐рдгрд╛рдо = company_view ({})
рд╕реНрд╡ ред рдореБрдЦрд░ (рдкрд░рд┐рдгрд╛рдо [ "рдХрдВрдкрдиреА" ], "рдПрд╕реАрдПрдордИ, рдЗрдВрдХред" )
рд╕реНрд╡ ред рдореБрдЦрд░ ( len (рдкрд░рд┐рдгрд╛рдо [ "рдкреНрд░реЛрдЬреЗрдХреНрдЯ" ]), 2 )

def test_people_view ( рд╕реНрд╡ ):
рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ_рд╡реНрдпреВ
рдкрд░рд┐рдгрд╛рдо = people_view ({})
рд╕реНрд╡ ред рдореБрдЦрд░ (рдкрд░рд┐рдгрд╛рдо [ "рдХрдВрдкрдиреА" ], "рдПрд╕реАрдПрдордИ, рдЗрдВрдХред" )
рд╕реНрд╡ ред рдореБрдЦрд░ ( рд▓реЗрди (рдкрд░рд┐рдгрд╛рдо [ "рд▓реЛрдЧ" ]), 2 )

рд╡рд░реНрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ (unittest ред TestCase):
рдбреАрдИрдПрдлрд╝ рд╕реЗрдЯрдЕрдк ( рд╕реНрд╡ ):
рдЖрд╡реЗрджрди рдЖрдпрд╛рдд рд╕реЗ рдореБрдЦреНрдп
рдПрдкреНрд▓рд┐рдХреЗрд╢рди = рдореБрдЦреНрдп ()
Webtest import TestApp рд╕реЗ
рд╕реНрд╡ ред testapp = TestApp (рдРрдк)

def test_home ( рд╕реНрд╡ ):
res = рд╕реНрд╡ ред рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ ред рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ( '/' , рд╕реНрдерд┐рддрд┐ = 200 )
рд╕реНрд╡ ред рдЕрд╕рдлрд▓ (рдмрд┐рдирд╛ рд╢рд░реАрд░ рдХреЗ 'рдШрд░' )

def test_it ( рд╕реНрд╡ ):
res = рд╕реНрд╡ ред рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ ред рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ( '/' , рд╕реНрдерд┐рддрд┐ = 200 )
рд╕реНрд╡ ред рдЕрд╕рдлрд▓ (рдмрд┐рдирд╛ рд╢рд░реАрд░ рдХреЗ 'рдШрд░' )
res = рд╕реНрд╡ ред рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ ред рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ( '/about.html' , рд╕реНрдерд┐рддрд┐ = 200 )
рд╕реНрд╡ ред рдЕрд╕рдлрд▓ (рдмрд┐рдирд╛ рд╢рд░реАрд░ рдореЗрдВ 'рд╕реНрд╡рд╛рдпрддреНрдд' )
res = рд╕реНрд╡ ред рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ ред рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ( '/ рд▓реЛрдЧ' , рд╕реНрдерд┐рддрд┐ = 200 )
рд╕реНрд╡ ред рдЕрд╕рдлрд▓ (рдмрд┐рдирд╛ рд╢рд░реАрд░ рдореЗрдВ 'рд╕реБрд╕рд╛рди' )
res = рд╕реНрд╡ ред рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ ред рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ( '/ acme' , рд╕реНрдерд┐рддрд┐ = 200 )
рд╕реНрд╡ ред рдЕрд╕рдлрд▓ (рдмрд┐рдирд╛ рд╢рд░реАрд░ рдХреЗ 'рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдирд╛рд░реЗ' )
рдлрд┐рд░ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
$ nosetests
рдЬреЛ рд╣рдореЗрдВ 6 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:
$ python application.py
рдФрд░ рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдЦреБрд╢ рд╣реИрдВ - 127.0.0.1:8080

рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрди

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ @ рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд┐рдирд╛ рджреЛ рджреГрд╢реНрдп рдкрдВрдЬреАрдХрд░рдг рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рдХреНрдпрд╛ рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдЧрд┐рд░рдЧрд┐рдЯ (рдЕрдм, рдЕрдЧрд░ рд╣рдо рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ? рдЕрдкрдиреЗ рдкрд╛рдЗрдерди рдХреЗ рднрд╛рд╡реЛрдВ рдореЗрдВ рдХреБрдЫ рдХреАрдбрд╝реЗ рдбрд╛рд▓рдХрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдБред
рдХреНрдпрд╛ WebTest рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░ рджреЗрдЧрд╛?
рдХреНрдпрд╛ рдЖрдкрдХреЗ URL рдореЗрдВ .html рдЬреЛрдбрд╝рдирд╛ рдХреБрдЫ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ?

рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рд╣рдордиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ URL рдХрд╛ рдПрдХ рд╕реНрдерд╛рди рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХреАред рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдордиреЗ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред

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

рд╢реЛрдз рдХрд░реЗ

рд╣реВрдб рдХреЗ рддрд╣рдд рдкрдВрдЬреАрдХрд░рдг рдХреИрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ?
рдЧрд┐рд░рдЧрд┐рдЯ, рдХреИрд╢рд┐рдВрдЧ, рдФрд░ рдбрд┐рд╕реНрдХ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИ

рдЪрд░рдг 05: рдПрдХ рдорд╛рд╕реНрдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛

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


All Articles