Соедините местный бэкэнд Django с угловым 7 - PullRequest
0 голосов
/ 14 ноября 2018

Я выставил API в Django бэкэнде. Я хочу получить этот запрос API от Angular 7. поэтому я реализовал код,

this.HttpClient.get('Http://127.0.0.1:8000/myapp/posts') .subscribe( (data:any[]) => { console.log(data) } )

Но я получаю сообщение об ошибке

Access to XMLHttpRequest at 'http://127.0.0.1:8000/myapp/posts' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}error: ProgressEvent {isTrusted: true, lengthComputable: false, loaded: 0, total: 0, type: "error", …}headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, headers: Map(0)}message: "Http failure response for (unknown url): 0 Unknown Error"name: "HttpErrorResponse"ok: falsestatus: 0statusText: "Unknown Error"url: null__proto__: HttpResponseBase

Может ли кто-нибудь предложить какое-либо решение для устранения этой ошибки?

1 Ответ

0 голосов
/ 14 ноября 2018

При отправке HTTP-запросов из вашего интерфейсного приложения с помощью API выборки браузера, клиента Axios или метода jQuery $ .ajax () (оболочки для интерфейса JavaScript XHR) в ваш внутренний API, созданный с помощью Django REST framework веб-браузер выдаст ошибку, связанную с той же самой политикой происхождения.

Cross Origin Resource Sharing или CORS позволяет клиентским приложениям взаимодействовать с API-интерфейсами, размещенными в разных доменах, позволяя современным веб-браузерам обходить ту же Политику происхождения, которая применяется по умолчанию.

Ссылка, как это сделать здесь: https://www.techiediaries.com/django-cors/

вам нужно добавить файл промежуточного программного обеспечения app / cors.py:

class CorsMiddleware(object):
    def process_response(self, req, resp):
        response["Access-Control-Allow-Origin"] = "*"
        return response

Это добавит заголовок Access-Control-Allow-Origin: * к каждому запросу Django, но перед этим вам нужно добавить его в список классов промежуточного программного обеспечения:

MIDDLEWARE_CLASSES = (
    #...
    'app.CorsMiddleware' 
)

Затем установите django-cors-headers

Начните с установки django-cors-headers с помощью pip

pip install django-cors-headers

...