Django 1.6 рдХреЗ рд░рд┐рд▓реАрдЬ рд╕реЗ рдорд┐рд▓реЛ

Django

рдЕрднрд┐рд╡рд╛рджрди, рд╣рдмреНрд░рд╛рд▓реАред рдХрд▓, рдЕрдЬрдЧрд░, Django рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рд╡реЗрдм рдврд╛рдВрдЪреЗ рдХреЗ рдмреНрд▓реЙрдЧ рдкрд░, рдирдВрдмрд░ 1.6 рдХреЗ рддрд╣рдд рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦрдмрд░ рдереАред

рд╕рднреА рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА, рд╕рд╛рде рд╣реА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдкрд┐рдЫрдбрд╝реЗ рдЕрд╕рдВрдЧрдд рд╣реИрдВ), рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рдиреЛрдЯреЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ ред рдореЗрд░реА рднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рдмрд╛рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред

рдЗрд╕ рд╕рдорд╛рдЪрд╛рд░ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреА рд░рд╛рдп рдореЗрдВ, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдореБрдЦреНрдп рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


1.6 рдореЗрдВ, рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, django.db.transaction рдореЙрдбреНрдпреВрд▓ django.db.transaction рдлрд╝рдВрдХреНрд╢рдВрд╕ autocommit() , commit_on_success() рдФрд░ commit_manually() рдЕрдм рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 1.8 рддрдХ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рд░рд╣реЗрдЧрд╛ред рдЙрдиреНрд╣реЗрдВ atomic() рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЕрдм рдХреНрдпрд╛ рд╣реЛрдЧрд╛: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдСрдЯреЛ рдХрдо рдореЛрдб рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдм рдЬрдВрдЧрд╛, рдкреАрдИрдкреА 249 рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реБрдП рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд▓реЗрди-рджреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрдВрддреНрд░ atomic() , рдЬреЛ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рд╕реЗ рдбрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рд╣рд░реА рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, SQL рд╕реНрдЯреЛрд░реЗрдЬ рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм TransactionMiddleware рдмрдЬрд╛рдп, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд┐рд░рд╛рдВрдХ ATOMIC_REQUESTS , рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдорд╛рди рдХреЛ True (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди False ) рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, django рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдпрд╛рдиреА рдЕрдиреБрд░реЛрдз рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╛рдкрд╕ рдирд╣реАрдВред

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ atomic() рдХреЛ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдпрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 from django.db import transaction #  @transaction.atomic def viewfunc1(request): #       do_stuff() and as a context manager: #   def viewfunc2(request): #       do_stuff() with transaction.atomic(): #       do_more_stuff() 


рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рд╕реНрдерд╛рдпреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди


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

рдкрд░реАрдХреНрд╖рдг


1.6 рдореЗрдВ, рдПрдХ рдирдпрд╛ django.test.runner.DiscoverRunner рдЯреЗрд╕реНрдЯ django.test.runner.DiscoverRunner , рдЬреЛ unittest2 рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдЦреЛрдЬ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрдм рдкрд░реАрдХреНрд╖рдг рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо test*.py рдорд╛рд╕реНрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, tests/__init__.py рдФрд░ tests/__init__.py рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЙрдиреНрд╣реЗрдВ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЙрдкрд╛рдп рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ test_models.py рдФрд░ tests/test.py рдФрд░ рднреА, рдбреЙрдХреНрд╕ рдЕрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди тАЛтАЛрдХрд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╡реИрд╕реЗ, рдкреНрд░рдмрдВрдзрди рдЯреАрдо ./manage.py test рдЕрдм --pattern рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдореБрдЦреМрдЯрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рдмрдВрдзрди рдХреА рдЯреАрдо рдиреЗ рдЬрд╛рдВрдЪ рдХреА


django-admin.py check рдХрдорд╛рдВрдб рдЕрдм рдЖрдкрдХреЛ рдЕрд╕рдВрдЧрдд рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓рд░реНрдЯ рджреЗрддреЗ рд╣реБрдП, рдЬрдВрдЧрд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЕрдиреБрдХреВрд▓рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдорд╛рдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╡реИрд╕реЗ, 1.6 рдЬрдВрдЧрд▓ рдХреА рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдЕрдЬрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг 2.6 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рдЕрдЧрд▓реЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдХрдо рд╕реЗ рдХрдо 2.7 рдЕрдЬрдЧрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

ORM рд╕реБрдзрд╛рд░


QuerySet рдЕрдм first() рдФрд░ last() рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде latest() рдЕрд▓рд╛рд╡рд╛ earliest() рд╕реЗ earliest() рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЪреАрдиреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

ORM рдЕрдм рджрд┐рдирд╛рдВрдХ, рдФрд░ / рдпрд╛ рд╕рдордп рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб рдЦреЛрдЬрддреЗ рд╕рдордп рдкрд╣рд▓реЗ рдЬреЛрдбрд╝реЗ рдЧрдП year , month рдФрд░ day рдЕрд▓рд╛рд╡рд╛ hour , minute рдФрд░ second рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЦреИрд░, рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдгред рдкреНрд░рддрд┐рд╢рдд рдЕрдиреБрдкрд╛рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдкрд░ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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


All Articles