Django 3.0 рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдЧрд╛

рдПрдВрдбреНрд░рдпреВ рдЧреЙрдбрд╡рд┐рди рдиреЗ DEP 0009: Async- рд╕рдХреНрд╖рдо Django рдХреЛ 9 рдордИ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛, рдФрд░ 21 рдЬреБрд▓рд╛рдИ рдХреЛ Django рддрдХрдиреАрдХреА рдкрд░рд┐рд╖рдж рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдореЛрджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╢рд╛ рд╣реИ рдХрд┐ Django 3.0 рдХреА рд░рд┐рд╣рд╛рдИ рд╕реЗ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд╣рдмрд░ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдЦрдмрд░ рдХреЛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдХрд░рдХреЗ рддрдп рдХрд┐рдпрд╛ - рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдореЗрд░реЗ рдЬреИрд╕реЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Django рдХреА рдЦрдмрд░ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред



рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрд╛рдпрдерди рдХреЛ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Django рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕реЗ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕рдорд░реНрдерди рдкрд░ рдкреНрд░рд╛рдердорд┐рдХ рдлреЛрдХрд╕ рдХреЗ рд╕рд╛рде рдЪреИрдирд▓ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред


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


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


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


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


рдХреНрдпрд╛ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдХрд╛рдо рд╣реИ? рдмреЗрд╢рдХред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ Django рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд┐рджреНрдз рд░реВрдкрд░реЗрдЦрд╛, рдФрд░ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдореБрджрд╛рдп рд▓реЗрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рд╕реЗрдЯ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЕрд╕рдВрднрд╡ рдереЗред


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


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


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг


рд╣рдо рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЕрднреНрдпрд╛рд╡реЗрджрди, рдорд┐рдбрд▓рд╡реЗрдпрд░, ORM рдФрд░ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП Django рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред


рдпрд╣ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдЪрд▓рд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдзреАрд░реЗ-рдзреАрд░реЗ рдЗрд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд┐рдВрдХреНрд░реЛрдирд╕ API рдореМрдЬреВрдж рд░рд╣реЗрдЧрд╛ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛, рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реИрдкрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред


ASGI рдореЛрдб Django рдХреЛ рдПрдХ рдореВрд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред WSGI рдореЛрдб рд╣рд░ рдмрд╛рд░ рдПрдХ рдЕрд▓рдЧ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ рдЬрдм Django рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓реЗрдпрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛред


ORM рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ ORM рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рд╕рдВрджрд░реНрднреЛрдВ рдФрд░ рд╕реНрдЯрд┐рдХреА рдереНрд░реЗрдбреНрд╕ рдХреА рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


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


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


рдкреВрд░реА рдкрд┐рдЫрдбрд╝реА рдЕрдиреБрдХреВрд▓рддрд╛ рд░рд╣реЗрдЧреАред рдПрдХ рдорд╛рдирдХ Django 2.2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Django (рдпрд╣ 3.0 рдпрд╛ 3.1 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдореЗрдВ рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред


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


рдирдП рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рддреНрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рддреЗрдЬреА рд╕реЗ рд╣реЛред рдлрдВрдбрд┐рдВрдЧ рдЙрд╕ рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЕрднреНрдпрд╕реНрдд рдирд╣реАрдВ рд╣реИрдВред


рд╡рд┐рдирд┐рд░реНрджреЗрд╢


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


рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  • рдордзреНрдпрд╡рд░реНрддреА рдкрд░рддреЗрдВ (рдорд┐рдбрд▓рд╡реЗрдпрд░)
  • рдкреНрд░рд╕реНрддреБрддрд┐ (рджреГрд╢реНрдп)
  • ORM
  • рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
  • рдкрд░реАрдХреНрд╖рдг
  • рдХреИрд╢рд┐рдВрдЧ
  • рдкреНрд░рдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди
  • рдИрдореЗрд▓

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


рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЕрдВрджрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ (2.2 рдореЗрдВ) рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрдд рд╣реИ - рд╣рдо рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗред


рдпрд╣ рдХреИрд╕реЗ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ Django рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╣рдо рдЗрд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд▓рдЧрднрдЧ рд╕рднреА рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВрдЧреЗред


рдЗрд╕ рдЦрдВрдб рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ, "рдкреНрд░рдХреНрд░рд┐рдпрд╛", рдпрд╣ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рдХрдИ рд╡рд┐рдХрд╛рд╕ рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрдЪрд┐рдд рд╕рдордп рдореЗрдВ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХреА рдорджрдж рд╕реЗ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рддрдХрдиреАрдХреА рд╕рдореАрдХреНрд╖рд╛


рд╡рд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдЬреЛ рд╣рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдордХрд╛рд▓рд┐рдХ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдПрдХ рд╢реИрд▓реА рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред


рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рддреАрди рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░реЗрдЧрд╛:


  • рдХреЗрд╡рд▓ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ (рд╣рдо рдпрд╣рд╛рдВ рд╣реИрдВ)
  • рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЖрд╡рд░рдг рдХреЗ рд╕рд╛рде рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
  • рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЖрд╡рд░рдг рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЖрд╡рд░рдг


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


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


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


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


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


рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


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


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


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


Threadlocals


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


рдереНрд░реЗрдбрд▓реЛрдХрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  • "рд╕рдВрджрд░реНрдн рд╕реНрдерд╛рдиреАрдп", рдЬрд╣рд╛рдВ рдХреБрдЫ рд╕реНрдЯреИрдХ-рдЖрдзрд╛рд░рд┐рдд рд╕рдВрджрд░реНрдн рдХреЗ рднреАрддрд░ рдПрдХ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдиреБрд░реЛрдзред рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  • "рдЯреНрд░реВ рдереНрд░реЗрдбреЛрдХреЙрд▓реНрд╕", рдЬрд╣рд╛рдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреВрд╕рд░реЗ рдереНрд░реЗрдб рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

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


рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА asgiref Local рд╕рд╛рде рд╣рд▓ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдЬреЛ рдХрд┐ coroutines рдФрд░ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред рдЕрдм рдпрд╣ contextvars рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж 3.6 рдХреЗ рд▓рд┐рдП рдмреИрдХрдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рджреВрд╕рд░реА рдУрд░, рд╕рд╣реА рдереНрд░реЗрдбреЛрдХреЛрд▓, рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдореЗрдВ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓реАрдХ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЬрдм рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдПрдХ рд╣реА рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ ORM рдХреЙрд▓ ("рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЖрд╡рд░рдг" рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди) рдХреЗ рд▓рд┐рдП рдПрдХ рдереНрд░реЗрдб рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ, рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ рд╕рдВрднрд╡ рдереАрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧреАред


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


рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рд╕рдорд░реНрдерди


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


рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдРрд╕рд╛ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдРрд╕рд╛ рдХрд╛рдо рдХрд░ рд╕рдХреЗ:


 #   value = cache.get("foo") #   value = await cache.get("bar") 

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


(рдиреЛрдЯ: рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ __acall__ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ coroutine рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ", рдЬреИрд╕реЗ рдХрд┐ "рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ __acall__ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛"ред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдФрд░ __acall__ рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ред рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВ __aiter__ рдФрд░ __aenter__ ред)


рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдореЗрдВ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡реЗ рд╕рдВрдШрд░реНрд╖ рди рдХрд░реЗрдВред рд╣рдо рдирд╛рдорд┐рдд рддрд░реНрдХ sync=True рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ / рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдХрд╛рдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ async def рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЧрд▓рддреА рд╕реЗ рдЗрд╕ рддрд░реНрдХ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рддреЛ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреЙрд▓ рдЦрддрд░рдирд╛рдХ рд╣реИред


Django рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддреНрдпрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, cache.get_async рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ cache.get ред рдпрджреНрдпрдкрд┐ рдпрд╣ рдПрдХ рдмрджрд╕реВрд░рдд рд╕рдорд╛рдзрд╛рди рд╣реИ, рдпрд╣ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ (рдЖрдкрдХреЛ _async рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде await рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред


рджреГрд╢реНрдп рдФрд░ HTTP рд╣реИрдВрдбрд▓рд┐рдВрдЧ


рджреГрд╢реНрдп рд╢рд╛рдпрдж рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред


Django рджреЛ рддрд░рд╣ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛:


  • рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡, рдкрд░рд┐рднрд╛рд╖рд┐рдд, рдЕрдм, рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ __call__
  • рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди (рдПрдХ __call__ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ) рдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ __call__ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред

рдЙрдиреНрд╣реЗрдВ BaseHandler рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ URL рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рджреГрд╢реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдмреЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП Django рдХрд╛ рдкрд╣рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рдореЗрдВ async_to_sync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ WSGI рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


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


рдореМрдЬреВрджрд╛ StreamingHttpResponse рд╡рд░реНрдЧ рдХреЛ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдпрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдореЗрд╢рд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдЧрд╛ред рдЗрд╕реА рддрд░рд╣ FileResponse ред рдЪреВрдВрдХрд┐ рдпрд╣ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд┐рдЫрдбрд╝рд╛ рдЕрд╕рдВрдЧрддрддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЕрднреА рднреА рд╕рдВрдХреНрд░рдордг рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ __iter__ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


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


рд╕рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ HTTP рдлрд╝рдВрдХреНрд╢рдВрд╕ WSGI рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдорддрджрд╛рди рдФрд░ рдзреАрдореА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдереНрд░реЗрдб / рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реЗ рдХрд░ рдЕрдм рдЙрддрдиреЗ рд╣реА рдЕрдХреНрд╖рдо рд╣реЛрдВрдЧреЗред ASGI рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рд╡рд╣реА рд╣реЛрдВрдЧреЗ рдЬреЛ рдХрдИ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЪреИрдирд▓ рдЬреИрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЧреИрд░-HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреИрд╕реЗ рдХрд┐ WebSocket рдХреЛ рднреА рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред


рдордзреНрдпрд╡рд░реНрддреА рдкрд░рддреЗрдВ


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


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


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


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


ORM


ORM рдХреЛрдб рдЖрдХрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ Django рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред


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


рдУрдЖрд░рдПрдо рдХреА рд╕рдорд╕реНрдпрд╛ рджреЛ рдореБрдЦреНрдп рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрддреА рд╣реИ - рдереНрд░реЗрдбреНрд╕ рдФрд░ рдЗрдВрдкреНрд▓рд╛рдВрдЯ рдмреНрд▓реЙрдХрд┐рдВрдЧред


рдзрд╛рд░рд╛рдУрдВ


ORM рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ Django рдХреЛ рдПрдХ рд╣реА рд╡реИрд╢реНрд╡рд┐рдХ connections рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХрдиреЗрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред


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


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


рд╣рдо connections рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ asgiref.local рдФрд░ рдереНрд░реЗрдбреНрд╕ рджреЛрдиреЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ - asgiref.local рд╕реЗ рдХреБрдЫ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рдеред рдХрдиреЗрдХреНрд╢рдВрд╕ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ - sync_to_async рдФрд░ async_to_sync рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ - рдФрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЛ рдПрдХ async_to_sync рдереНрд░реЗрдб рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдзрд╛рдЧрд╛-рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рддреЛрдбрд╝рдиреЗред


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


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


рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рд╕реА рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреЛрдб рд╕реЗ connections рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рд╕рдордХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╣реА рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ; рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреЛрдб рдПрдХ "рдХрдиреЗрдХреНрд╢рди рд╕рдВрджрд░реНрдн" рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рджрд┐рди рд╕реЗ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред


рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ transaction.atomic() рдХреЗ рдЕрд▓рд╛рд╡рд╛ transaction.atomic() рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреНрд░рдо рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрджрд░ рд╣реИред


рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдПрдХ рдирдпрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ db.new_connections() рдЬреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рднреА рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рднреАрддрд░ рдордирдорд╛рдиреЗ atomic() рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред


рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк new_connections() рдмреНрд▓реЙрдХ new_connections() , рддреЛ Django рдирдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рдВрджрд░реНрдн рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рдП рдЧрдП рд╕рднреА рд▓реЗрдирджреЗрди рдЬрд╛рд░реА рд╣реИрдВ; рдХреЛрдИ рднреА ORM рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдирдП рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рджреЗрдЦреЗрдЧрд╛ред рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЗрди-рджреЗрди рдЕрд▓рдЧрд╛рд╡ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдирдП рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рднреА рдЧреИрд░-рд▓реЗрдирджреЗрди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ new_connections рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХреЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдЗрди рдирдП рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЗрдирджреЗрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП atomic() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рджреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ new_connections рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рдЦреЛрд▓реЗ рдЧрдП рд▓реЗрди-рджреЗрди "рдирд┐рд▓рдВрдмрд┐рдд" рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирдП new_connections рдмреНрд▓реЙрдХ new_connections рд╣реЛрдиреЗ рддрдХ ORM рдХреЙрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


рдпрд╣ API рдХреИрд╕реЗ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 async def get_authors(pattern): # Create a new context to call concurrently async with db.new_connections(): return [ author.name async for author in Authors.objects.filter(name__icontains=pattern) ] async def get_books(pattern): # Create a new context to call concurrently async with db.new_connections(): return [ book.title async for book in Book.objects.filter(name__icontains=pattern) ] async def my_view(request): # Query authors and books concurrently task_authors = asyncio.create_task(get_authors("an")) task_books = asyncio.create_task(get_books("di")) return render( request, "template.html", { "books": await task_books, "authors": await task_authors, }, ) 

рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рд╡рд╛рдЪрд╛рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╢реЙрд░реНрдЯрдХрдЯ рдЬреЛрдбрд╝рдирд╛ рднреА рд▓рдХреНрд╖реНрдп рд╣реИ (рдФрд░ рдкрд╛рдпрдерди 3.6 рдореЗрдВ asyncio.create_task рдореЗрдВ 3.7 рдореЗрдВ asyncio.create_task рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛)ред


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


рддрд╛рддреНрдкрд░реНрдп рддрд╛рд▓реЗ


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


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


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Django рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ - select_related , рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрдИ-рд╕реЗ-рдХрдИ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд▓рд┐рдП prefetch_related ред рдпрджрд┐ рдЖрдк ORM рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд┐рд╕реА рднреА рдЕрд╡рд░реЛрдзрдХ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддреА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдлрд╝реАрд▓реНрдб рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


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


QuerySet , рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рддреБрд▓реНрдпрдХрд╛рд▓рди рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ:


 async def view(request): data = [] async for user in User.objects.all(): data.append(await extract_important_info(user)) return await render("template.html", data) 

рдЕрдиреНрдп


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


рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕


рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реИрдВ, рдФрд░ рдпреЛрдЬрдирд╛ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдЫреЛрдбрд╝рдиреЗ рдХреА рд╣реИред , , DEP.


, Jinja2 , .


, Django , . Jinja2 , , , .


, render_async , render ; , , .



Django тАФ _async - (, get_async , set_async ).


, API sync_to_async , BaseCache .


, thread-safety API , Django, , . , ORM, , .



, , , ModelForm ORM .


, - clean save , , . , , , DEP.


Email


Django, . send_mail_async send_mail , async - (, mail_admins ).


Django , - SMTP, . , , , , .


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


, Django .


ASGI- asgiref.testing.ApplicationCommunicator . assert' .


Django , , . , тАФ , , HTTP event loop, WSGI.


. , , .


, , . async def @async_to_sync , , , Django test runner.


asyncio ( loop' , ) , , , DEBUG=True . тАФ , , .


WebSockets


Django; , Channels , ASGI, .


, Channels, , ASGI.



, , . , .


, . , тАФ .


, , . , ORM, , , .


:


  • ( 3.0)


    • HTTP, ( )
    • async ORM

  • ( 3.1)


    • ORM ( )
    • ( )
    • ( )


    • ORM ( )
    • ( )
    • Email


; , . , , , , .


, - ; , , . , , Django, Django async-only .


, , DEP , , , email . DBAPI тАФ , core Python , , PEP, .



, , , . Django , - , -; .


, - . , тАФ , , .


Python тАФ . - Python , , .


Python asyncio , , . , , , , Django-size .



Django, ┬л┬╗; , , тАФ , Django тАФ .


, . , API , Django - .


, , Django . , Django ORM , , , -.


, , тАФ . - long-poll server-sent events. Django , - .



Django; . , , , .


Django , . ; Django- , , , , , .


, -- Django .



, . ┬л Django┬╗, ; , , .


, , , , API Django, , , Python 3, API, Django Python.


Python


Python . Python, , , .


, Django тАФ - Python тАФ , Python, Python . , , , .



, Django, . , Django , .


тАФ , , , , .


, тАФ , , тАФ Django ( , Python ).


Django?


, Django. , Lawrence Journal-World тАФ , , SPA тАФ , , . , , , , .


, Django , - , тАФ тАФ . , , ; , Django , .


, Django . , . , , , тАФ , , .



Django django-developers , , , , DEP.


, , , :


  • : master- Django .
  • : Django , , , , Django .
  • : , , Django, , Django. , , , , .

Channels DEP ; Django , .


, , . DEP , , тАФ Django .


. Django, , , WSGI , event loop , . 10% тАФ , . , .


, , (- , Python ). , Django ; , , , Django master- .


, ( ORM, ..), ; Python.


, , Django, ┬л┬╗ . , , , , .


рд╡рд┐рдХрд▓реНрдк


, , , .


_async


, , (, django.core.cache.cache.get_async ), :


 from django.core.cache_async import cache cache.get("foo") 

, ; , , .


, , ; .


Django


- , ; , , , тАФ .


, , , тАФ , .


Channels


, Channels , ┬л┬╗ Django. , - , , Django; ORM, HTTP/middleware flow .


asyncio


event loop' Python, asyncio , Django. await async Python event loop .


, asyncio , ; Django , , . Django ; , , async runtime, , .


Greenlets/Gevent


Gevent, , Python.


, . yield await , API, Django, , . , .


, , , . greenlet-safe Django ORM - new-connection-context, .


, . Django ┬л ┬╗ gevent, , , , .



DEP.


, тАФ , тАФ , ( ).


, , - . Django Fellows ; тАФ , ( ), , , - .


тАФ , Kickstarter migrations contrib.postgres , MOSS (Mozilla) Channels . , Django, , .


, . тАФ Python, Django тАФ тАФ . , Django/async, .


HTTP/middleware/view flow, , , , ┬л ┬╗, .


, , , ( , Fellows, / , Channels, , ), , .


, , , , Django, .



, , , , API.


, , , , HTTP/middleware flow. , API, APM, .


, , Django , , . , ORM , , тАФ , ORM .



DEP , ; Django .


, asgiref , , . Django Django.


Channels , Django, Django.



( ) CC0 1.0 Universal .

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


All Articles