Heim > Backend-Entwicklung > Python-Tutorial > Beispielcode für die domänenübergreifende Anforderungsverarbeitung von Django

Beispielcode für die domänenübergreifende Anforderungsverarbeitung von Django

不言
Freigeben: 2018-05-02 14:18:56
Original
1417 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich der Beispielcode zur domänenübergreifenden Anforderungsverarbeitung vorgestellt, der einen gewissen Referenzwert hat. Jetzt können Freunde in Not darauf verweisen.

Django verarbeitet Ajax Domänenübergreifende Anfragen. Domänenzugriff

Bei der Verwendung von Javascript für den Ajax-Zugriff tritt der folgende Fehler auf

Fehlerursache: JavaScript dient der Sicherheit Gründe und ein domänenübergreifender Zugriff sind nicht gestattet. Die folgende Abbildung ist eine Erläuterung des domänenübergreifenden Zugriffs:

Konzept:

Der hier erwähnte js-domänenübergreifende Zugriff bezieht sich auf js oder Python führen die Datenübertragung oder Kommunikation zwischen verschiedenen Domänen durch, z. B. die Verwendung von Ajax zum Anfordern von Daten von einer anderen Domäne oder die Verwendung von js zum Abrufen von Daten im Framework (Django) verschiedener Domänen auf der Seite. Solange Protokoll, Domänenname oder Port unterschiedlich sind, werden sie als unterschiedliche Domänen betrachtet.

Lösung

1. Ändern Sie die Datei „views.py“

Ändern Sie die entsprechende API-Implementierungsfunktion in „views.py“. Erlauben Sie anderen Domänen, Daten über Ajax anzufordern:

todo_list = [
  {"id": "1", "content": "吃饭"},
  {"id": "2", "content": "吃饭"},
]


class Query(View):
  @staticmethod
  def get(request):
    response = JsonResponse(todo_list, safe=False)
    response["Access-Control-Allow-Origin"] = "*"
    response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS"
    response["Access-Control-Max-Age"] = "1000"
    response["Access-Control-Allow-Headers"] = "*"
    return response

  @staticmethod
  def post(request):
    print(request.POST)
    return HttpResponse()
Nach dem Login kopieren

2. Fügen Sie Middleware django-cors-headers hinzu

GitHub-Adresse: https://. github.com/ottoyiu/django-cors-headers

2.1. Pip install django-cors-headers

2. 2 App hinzufügen

INSTALLED_APPS = (
  ...
  'corsheaders',
  ...
)
Nach dem Login kopieren

2.3 Middleware hinzufügen

MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
  ...
  &#39;corsheaders.middleware.CorsMiddleware&#39;,
  &#39;django.middleware.common.CommonMiddleware&#39;,
  ...
]
Nach dem Login kopieren

2.4 Konfigurieren Sie die Adresse, die den standortübergreifenden Zugriff auf diese Site ermöglicht

CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
   &#39;localhost:63343&#39;,
)

# 默认值是全部:
CORS_ORIGIN_WHITELIST = () # 或者定义允许的匹配路径正则表达式.
CORS_ORIGIN_REGEX_WHITELIST = (&#39;^(https?://)?(\w+.)?>google.com$&#39;, )  # 默认值:
CORS_ORIGIN_REGEX_WHITELIST = ()
Nach dem Login kopieren

2.5 Zulässige Zugriffsmethoden festlegen

CORS_ALLOW_METHODS = (
&#39;GET&#39;,
&#39;POST&#39;,
&#39;PUT&#39;,
&#39;PATCH&#39;,
&#39;DELETE&#39;,
&#39;OPTIONS&#39;
)
Nach dem Login kopieren

2.6 Zulässige Header festlegen:

Standardwert:

CORS_ALLOW_HEADERS = (
&#39;x-requested-with&#39;,
&#39;content-type&#39;,
&#39;accept&#39;,
&#39;origin&#39;,
&#39;authorization&#39;,
&#39;x-csrftoken&#39;
)
Nach dem Login kopieren

Verwandte Empfehlungen:

Django-Beispiel für die Verwendung der Protokollierung zum Drucken von Protokollen

Django-Projekt: Praktischer Benutzer-Avatar-Upload und Zugriff

Das obige ist der detaillierte Inhalt vonBeispielcode für die domänenübergreifende Anforderungsverarbeitung von Django. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage