рдХреНрд╡реЗрд░реА рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ: рдмреЗрд╕рд┐рдХ Django рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг

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





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

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

from django.test import TestCase, Client
from django.urls import reverse
from trucks.models import Truck

class TrucksTestCase(TestCase):
    def test_list_trucks_view_performance(self):
        client = Client()

        Truck.objects.create(...)

        with self.assertNumQueries(6):
            response = client.get(reverse("trucks:list_trucks"))

        self.assertEqual(response.context["trucks_list"], 1)

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рджреЗрдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди, "trucks:list_trucks"рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╡рд▓ 6 рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рдФрд░ рд╣реИ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкрд╣рд▓реЗ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ Truck, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рджреГрд╢реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛ рдореЗрдВ trucks_listрдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд╕реНрддреБ рд╣реИ ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдЧрд╛рд░рдВрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦрд╛рд▓реА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рддрддреНрдХрд╛рд▓ рдмрдирд╛рдирд╛ Truckрдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рдЯреНрд░рдХ рд╕реВрдЪреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг Truckрдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

from django.test import TestCase, Client
from django.urls import reverse
from trucks.models import Truck

class TrucksTestCase(TestCase):
    def test_list_trucks_view_performance(self):
        client = Client()

        Truck.objects.create(...)

        with self.assertNumQueries(6):
            response = client.get(reverse("trucks:list_trucks"))

        self.assertEqual(response.context["trucks_list"], 1)

        Truck.objects.create(...)

        with self.assertNumQueries(6):
            response = client.get(reverse("trucks:list_trucks"))

        self.assertEqual(response.context["trucks_list"], 2)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджрд┐рдП рдЧрдП рдЖрдЗрдЯрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо 2 рдЯреНрд░рдХреЛрдВ ( Truck) рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИред

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

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

from trucks.models import Truck, TruckDriver
...
        truck = Truck.objects.create(...)
        TruckDriver.objects.create(name="Alex", truck=truck)

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

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

рд╡реИрд╕реЗ, рдЖрдк рдЕрднреА рднреА рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рдлрд┐рд░ рдорд┐рд▓рддреЗ рд╣реИрдВред

All Articles