Django-rest-framework: рдбреАрдЖрд░рдПрдл рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдирд╡ре░ 2017  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: encode/django-rest-framework

#908 . рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж

OPTIONS (рдореЗрдЯрд╛рдбреЗрдЯрд╛) рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ DRF рдореЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

W3C рд╕реНрдкреЗрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рднреА рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ OPTIONS рдЕрдиреБрд░реЛрдз рдкреНрд░рдорд╛рдгрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рдорд╛рдгрд┐рдд рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдореЗрд╢рд╛ 401 рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕реЗ рдЪрд╢реНрдореЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрднреА рдирд╣реАрдВ рднреЗрдЬрддреЗ рд╣реИрдВ:

рдЕрдиреНрдпрдерд╛, рдЙрдбрд╝рд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред рдореИрдиреНрдпреБрдЕрд▓ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдлрд╝реНрд▓реИрдЧ рдФрд░ рдмреНрд▓реЙрдХ рдХреБрдХреА рдлрд╝реНрд▓реИрдЧ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, OPTIONS рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рд░реЗрдлрд╝рд░рд▓рдХрд░реНрддрд╛ рд╕реНрд░реЛрдд рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рд░реЗрдлрд╝рд░рд▓рдХрд░реНрддрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рд╕реНрд░реЛрдд рдореВрд▓ рд╕реЗ рдЕрдиреБрд░реЛрдз URL рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
DRF рдХреЛ рдорд╛рдирдХ рдЕрдиреБрдорддрд┐ рд╡рд░реНрдЧреЛрдВ (IsAuthenticated, IsAdminUser, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА OPTIONS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рддрдм рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдорд╛рдирдХ CORS рд╕рдВрдЧрддрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди)

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг :

view.py

class MyView(APIView):

    permission_classes = (IsAuthenticated,)

urls.py

urlpatterns = [
    url(r'^myview/', MyView.as_view()),
]

рд╕рд╛рдВрддреНрд╡рдирд╛ рджреЗрдирд╛

http GET http://127.0.0.1:8000/myview/
HTTP/1.0 401 Unauthorized

http OPTIONS http://127.0.0.1:8000/myview/
HTTP/1.0 401 Unauthorized

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

http GET http://127.0.0.1:8000/myview/
HTTP/1.0 401 Unauthorized

http OPTIONS http://127.0.0.1:8000/myview/
HTTP/1.0 200 OK

рдЕрд╕реНрдерд╛рдпреА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб

class IsAuthenticated(permissions.IsAuthenticated):

    def has_permission(self, request, view):
        if request.method == 'OPTIONS':
            return True
        return super(IsAuthenticated, self).has_permission(request, view)

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

рдбреАрдЖрд░рдПрдл рд╕рдВрд╕реНрдХрд░рдг: 3.7.3
рдкрд╛рдпрдерди 3.6.3

рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рднрд▓реЗ рд╣реА рд╡реЗ рдкреБрдЯ, рдкреЛрд╕реНрдЯ, рдкреНрд░рд╛рдкреНрдд, рд╡рд┐рдХрд▓реНрдк рдЖрджрд┐ рд╣реЛрдВред

рдЗрд╕рдиреЗ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛:

# myapp/permissions.py
from rest_framework.permissions import IsAuthenticated

class AllowOptionsAuthentication(IsAuthenticated):
    def has_permission(self, request, view):
        if request.method == 'OPTIONS':
            return True
        return request.user and request.user.is_authenticated

рдФрд░ settings.py рдореЗрдВ:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication',),
    'DEFAULT_PERMISSION_CLASSES': (
        'myapp.permissions.AllowOptionsAuthentication',
    )
}

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

рдбреАрдЖрд░рдПрдл рд╕рдВрд╕реНрдХрд░рдг: 3.7.3
рдкрд╛рдпрдерди 3.6.3

рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рднрд▓реЗ рд╣реА рд╡реЗ рдкреБрдЯ, рдкреЛрд╕реНрдЯ, рдкреНрд░рд╛рдкреНрдд, рд╡рд┐рдХрд▓реНрдк рдЖрджрд┐ рд╣реЛрдВред

рдЗрд╕рдиреЗ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛:

# myapp/permissions.py
from rest_framework.permissions import IsAuthenticated

class AllowOptionsAuthentication(IsAuthenticated):
    def has_permission(self, request, view):
        if request.method == 'OPTIONS':
            return True
        return request.user and request.user.is_authenticated

рдФрд░ settings.py рдореЗрдВ:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication',),
    'DEFAULT_PERMISSION_CLASSES': (
        'myapp.permissions.AllowOptionsAuthentication',
    )
}

рдореИрдВрдиреЗ рднреА рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИред рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

100% рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП" рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ OPTIONS рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╢рд╛рдпрдж рдПрдХ рдзрдиреНрдп CORS рд╡рд┐рдХрд▓реНрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реАрдзреЗ https://github.com/ottoyiu/django-cors-headers/ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдпрджрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдЙрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ?

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

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

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

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

рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП W3C рдпреБрдХреНрддрд┐ рдХреЗрд╡рд▓ CORS рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реА рд▓рд╛рдЧреВ рд╣реЛред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдбреАрдЖрд░рдПрдл рдХреЗ рдкрд╛рд╕ рд╕рдВрджрд░реНрдн рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рджреЗрд╡ рдХреЛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрдЯрд┐рдВрдЧ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ CORS рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ, рддреЛ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдВред CORS рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╣реИред

рдЕрд╕рд▓ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╣рдорд╛рд░рд╛ рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдк рд╡реНрдпрд╡рд╣рд╛рд░ рддрдм рд╕реЗ рд▓рд╛рдЧреВ рд╣реИ рдЬрдм JSONP рд╡рд╣ рдерд╛ рдЬреЛ рд▓реЛрдЧ CORS рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╢рд╛рдпрдж рдПрдХ рд░рд┐рдлреНрд░реЗрд╢ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдХрд╛рдлреА рддрджрд░реНрде рд╕реЗрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ CORS рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред .

+1

@tomchristie рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдбреЗрдЯ/рдлрд┐рдХреНрд╕ рдХрдм рд╣реЛрдЧрд╛? рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрдард╛ рд░рд╣рд╛ рд╣реВрдВред

@medakk рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХрджрдо рд╕рд╣реА рд╣реИ, рдЗрд╕ рдмреАрдЪ!

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ 3.9 . рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ

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

def check_permissions(self, request):
        if request.method == 'OPTIONS':
            return
        super(MyApiView, self).check_permissions(request)

рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдХрд░ рдЗрд╕ рдкрд░ рдФрд░ рдЧреМрд░ рдХрд┐рдпрд╛ - https://github.com/OttoYiu/django-cors-headers рдкреИрдХреЗрдЬ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рдкреВрд░реНрд╡-рдЙрдбрд╝рд╛рди рдХрд┐рдП OPTIONS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рд╕реАрдзреЗ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрд░рдИрдПрд╕рдЯреА рдврд╛рдВрдЪрд╛ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрд░рдИрдПрд╕рдЯреА рдврд╛рдВрдЪреЗ рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЖрд░рдИрдПрд╕рдЯреА рдврд╛рдВрдЪреЗ рдХреЛ рдирд╣реАрдВ рдЫреВрддреА рд╣реИрдВ: https://github.com/ottoyiu/django-cors-headers/blob/master/corsheaders/middleware.py#L83

рдзрдиреНрдпрд╡рд╛рджред рд╣рдо django-cors-headers рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╣рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЕрднреА рднреА рдкрд╣рд▓реЗ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ W3C рдЕрдиреБрд░реВрдк CORS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП DRF рдХреЛ рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддреЗ/рддреГрддреАрдп рдкрдХреНрд╖ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╣реИред
рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдЯрд┐рдХрдЯ рдЗрд╕рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ DRF W3C CORS рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ, рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

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

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

рдЖрдЗрдП рд╕реНрддрд░ рдХреЛ рдиреАрдЪреЗ рд▓рд╛рдПрдВред

Middleware CORS рд╣реЗрдбрд░ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭрджрд╛рд░ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЖрд░рдИрдПрд╕рдЯреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд┐рд╕ рдирд┐рдХрд╛рдп рдХреЛ REST рдлреНрд░реЗрдорд╡рд░реНрдХ OPTIONS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рдпрд╣рд╛рдБ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реАрдлрд╝реНрд▓рд╛рдЗрдЯреЗрдб CORS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╡реИрд╕реЗ рднреА рдорд┐рдбрд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдорд╛рдирдХ CORS рдЕрдиреБрд░реЛрдз рдХрд┐рд╕реА рднреА HTTP рд╡рд┐рдзрд┐ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпреВрд╕реЗрдЯ/рджреГрд╢реНрдпреЛрдВ рд╕реЗ рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП allowed_cors_headers рд╡рд┐рдзрд┐ред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЬреНрдЮрд╛рди рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╕реЗрд╡рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд░рд╛рдЙрдЯрд░ рдореЗрдВ рд╕рднреА рджреГрд╢реНрдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдЯрд░-рд╕реНрддрд░реАрдп рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрдирд╛ рднреА рдлрд╛рдпрджреЗрдордВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рдореБрджреНрджреЛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛:

  • рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди
  • рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди

рдпрд╣ рдореЗрд░реА рдкрд╕рдВрджреАрджрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд░реБрдЭрд╛рди рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдУрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ https://www.django-rest-framework.org/topics/ajax-csrf-cors/#cors рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ CORS рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдХреИрд╕реЗ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдХрд┐рд╕ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?

рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд╛рдЗрдЯ рдХреА CORS рдиреАрддрд┐ рдХреНрдпрд╛ рд╣реИред

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

рдХрд▓реНрдкрдирд╛ рдХреА рдореЗрд░реА рдЧрд▓рддрдлрд╣рдореА, рдЙрдлрд╝ред

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

рд▓реЗ рдорд╛рд░ред 19 рдлрд░рд╡рд░реАред 2019 10:22 рдкреВрд░реНрд╡рд╛рд╣реНрди, рдЯреЙрдо рдХреНрд░рд┐рд╕реНрдЯреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com a
рдЗрдХреНрд░рд┐рдЯ:

рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ
https://www.django-rest-framework.org/topics/ajax-csrf-cors/#cors рд╣реИ
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ CORS рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╕рд╣реА рд╣реИ
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгред

рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдХреИрд╕реЗ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдХрд┐рд╕ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?

рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд╛рдЗрдЯ рдХреА CORS рдиреАрддрд┐ рдХреНрдпрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/encode/django-rest-framework/issues/5616#issuecomment-465146969 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AFhtlM6bG-Bs2CvoO972pIfwvxLHbzAxks5vPAjAgaJpZM4Qlvkn
.

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sebdiem picture sebdiem  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kdzxiaoli picture kdzxiaoli  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

snbuback picture snbuback  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

doctorallen picture doctorallen  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

thnee picture thnee  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ