Django-guardian: ANONYMOUS_USER_NAME рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдорд╛рд░реНрдЪ 2016  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: django-guardian/django-guardian

рдХреНрдпрд╛ рдореБрдЭреЗ guardian.conf.settings рдореЗрдВ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде

if ANONYMOUS_USER_NAME is None:
    ANONYMOUS_USER_NAME = 'AnonymousUser'

ANONYMOUS_USER_NAME рдХрднреА рднреА рдХрд┐рд╕реА рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рддрдереНрдп рдХреЛ рд╢реВрдиреНрдп рдХрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рдирд╣реАрдВ рдерд╛ред

рдЪрд┐рдпрд░реНрд╕

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

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

try:
    ANONYMOUS_USER_NAME = settings.ANONYMOUS_USER_NAME
except AttributeError:
    try:
        ANONYMOUS_USER_NAME = settings.ANONYMOUS_DEFAULT_USERNAME_VALUE
        warnings.warn("The ANONYMOUS_DEFAULT_USERNAME_VALUE setting has been renamed to ANONYMOUS_USER_NAME.", DeprecationWarning)
    except AttributeError:
        ANONYMOUS_USER_NAME = "AnonymousUser"

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

try:
    ANONYMOUS_USER_NAME = settings.ANONYMOUS_USER_NAME
except AttributeError:
    try:
        ANONYMOUS_USER_NAME = settings.ANONYMOUS_DEFAULT_USERNAME_VALUE
        warnings.warn("The ANONYMOUS_DEFAULT_USERNAME_VALUE setting has been renamed to ANONYMOUS_USER_NAME.", DeprecationWarning)
    except AttributeError:
        ANONYMOUS_USER_NAME = "AnonymousUser"

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдЪреВрдВрдХрд┐ ANONYMOUS_USER_NAME рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ USERNAME_FIELD рд▓рд┐рдП рдореВрд▓реНрдп рд╣реИ, ANONYMOUS_USER_NAME рдПрдХ рдИрдореЗрд▓ рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ "AnonymousUser" рдореЗрдВ рдЪреВрдХ рдХрд░рдирд╛ рднреНрд░рд╛рдордХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ANONYMOUS_USER_ID рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ ANONYMOUS_DEFAULT_USERNAME_VALUE рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдм, рд╡реЗ рдПрдХ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЯреНрд░рд┐рдЧрд░ рдФрд░ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣реВрдВрдЧрд╛:

ANONYMOUS_USER_NAME = getattr(settings, 'ANONYMOUS_USER_NAME', None)

if ANONYMOUS_USER_NAME is None:
    ANONYMOUS_USER_NAME = getattr(settings, 'ANONYMOUS_DEFAULT_USERNAME_VALUE', None)
    if ANONYMOUS_USER_NAME is not None:
        warnings.warn("[...]", DeprecationWarning)

рдФрд░ рдЙрдкрд░реЛрдХреНрдд рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдореБрдЭреЗ try...except рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдЪреНрдЪрд╛рдИ рд╕рдВрдЦреНрдпрд╛ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдХреНрд▓рд╛рд╕рд┐рдХ <SETTING_NAME> = getattr(settings, "<SETTING_NAME>", <default_value>) рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

рддреЛ рдХреНрдпреЛрдВ рди 1.5.0 рдкрд░ рдЯрдХрд░рд╛рдХрд░, ANONYMOUS_DEFAULT_USERNAME_VALUE рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдП?

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЗрд░рд╛рджрд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Django Guardian рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдерд╛ред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ? рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЕрдЬреНрдЮрд╛рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

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

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

рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдПрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА/рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИред

рдмреЗрдирд╛рдореА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЪреАрдпрд░реНрд╕ред рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ b*lls рдХрд╛ рднрдВрдбрд╛рдлреЛрдбрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рджреЛрд╕реНрддреЛрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рдХрд┐ рдПрдХ рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ django-guardian рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрдиреЗ рдХреА рдХрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рддреЛ рдЕрдм рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмрджрд▓реЗрдВ?

рддреЛ try ... except рдЬреБрдбрд╝реЗ рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ 2 рдЕрдВрдЧреВрдареЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдереЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ 2 рдЕрдВрдЧреВрдареЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдереЗред рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдирдП рдкреНрд░рддрд┐рдЧрдорди рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдЧрдорди рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ, рдореИрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

@brianmay рднреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред :+1: рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджреНрдпрдкрд┐!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕