


Die Django-Anwendung von Python löst den domänenübergreifenden AJAX-Zugriff
Angesichts der domänenübergreifenden Probleme, die in Django beim Schreiben von APIs für AJAX-Aufrufe auftreten, fassen wir die Methoden der Django-Anwendungen von Python zusammen, um domänenübergreifende AJAX-Zugriffsprobleme zu lösen, indem wir die auf GitHub freigegebene Open-Source-Datei django-cors verwenden. Header werden besonders empfohlen
Einführung
verwendet Django, um eine API auf der Serverseite zu schreiben und gibt JSON-Daten zurück. Verwenden Sie Ajax, um die API aufzurufen:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/> <title>test</title> </head> <body> <button onclick="showPersonInfo()">点我获取数据</button> </body> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script> function showPersonInfo(){ $.getJSON( 'http://xxx/account/getuserinfo/', {username: "abc"}, function(json) { var html='<br>'+'用户名:'+json.username+'<br>'+'姓:'+json.first_name+'<br>'+'名:'+json.last_name+'<br>'+'邮箱'+json.email; document.write(html); } ) } </script> </html>
Der Chrome-Browser meldet jedoch einen Fehler:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Nach etwas Google habe ich herausgefunden, dass dieses Problem durch CORS verursacht wird.
Was ist CORS?
CORS (Cross-Origin Resource Sharing) ist ein domänenübergreifender Zugriffsmechanismus, der es Ajax ermöglicht, domänenübergreifenden Zugriff zu erreichen.
Tatsächlich kann das Hinzufügen von „Access-Control-Allow-Origin: *“ zum Antwortheader des Servers CORS unterstützen. Informationen zur Konfiguration von Apache/Nginx usw. finden Sie im Referenzdokument.
Zum Beispiel:
API wird auf DomainA bereitgestellt;
Ajax-Datei wird auf DomainB bereitgestellt und die Ajax-Datei wird gesendet zur API-Anfrage, Daten zurückgeben;
Der Benutzer greift über DomainC auf die Ajax-Datei von DomainB zu und fordert Daten an
Der obige Prozess führt zu domänenübergreifender Zugriff. Wenn Sie Ajax direkt zum Anfordern verwenden, schlägt die Anfrage fehl, da Chrome Sie auffordert:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
So lösen Sie das Problem des domänenübergreifenden Ajax-Zugriffs ?
Es gibt zwei Möglichkeiten, domänenübergreifende Probleme zu lösen: 1. Verwenden Sie JSONP. 2. Machen Sie CORS wirksam.
Mit der JSONP-Methode müssen Sie den Server beispielsweise die Antwort im JSONP-Format zurückgeben lassen , Django kann JSONP-bezogene Dekoratoren hinzufügen, wie zum Beispiel: http://www.php.cn/ Da mir diese Methode nicht besonders gefällt, überspringe ich sie hier. Bitte lesen Sie die Referenzmaterialien unten.
Verwenden Sie CORS: Dies ist bequemer zu verwenden. Die meisten Browser unterstützen es jetzt und mein Webserver ist vollständig für den Aufruf anderer geöffnet, daher wird CORS empfohlen.
1. Verwenden Sie JSONP
Bei der Verwendung von Ajax zum Abrufen von JSON-Daten gibt es domänenübergreifende Einschränkungen. Beim Aufrufen von js-Skriptdateien auf einer Webseite ist diese jedoch nicht von der domänenübergreifenden Übertragung betroffen. Daher müssen wir den dataType im Ajax-Aufruf vom JSON- in das JSONP-Format ändern (die entsprechende API muss auch JSONP unterstützen).
JSONP kann nur für GET-Anfragen verwendet werden.
2. Ändern Sie die Datei „views.py“ direkt in Django
Ändern Sie die entsprechende API-Implementierungsfunktion in „views.py“, um anderen Domänen das Anfordern von Daten über Ajax zu ermöglichen:
def myview(_request): response = HttpResponse(json.dumps({"key": "value", "key2": "value"})) 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
3. Installieren Sie django-cors-headers
Hier ist eine weitere Entdeckung! In Django hat jemand die CORS-Header-Middleware entwickelt. Sie müssen nur einige einfache Konfigurationen in Settings.py vornehmen. Siehe: http://www.php.cn/ Jetzt können Sie es verwenden, die Serverseite ist vollständig geöffnet . Aktivieren Sie CORS. Es ist so cool, keine domänenübergreifenden Sorgen zu haben! ~
Django-cors-header installieren:
pip install django-cors-headers
In Settings.py hinzufügen:
INSTALLED_APPS = ( ... 'corsheaders', ... ) ... MIDDLEWARE_CLASSES = ( ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... )
Sie können eine Whitelist konfigurieren, die den domänenübergreifenden Zugriff ermöglicht, oder sie direkt so einstellen, dass der gesamte domänenübergreifende Zugriff zulässig ist. Informationen zur spezifischen Konfiguration finden Sie in den Anweisungen auf der Github-Seite.
Weitere Artikel zu Pythons Django-Anwendung, die den domänenübergreifenden AJAX-Zugriff löst, finden Sie auf der chinesischen PHP-Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Verwenden Sie Python im Linux -Terminal ...

Fastapi ...
