Не удается опубликовать данные от Angular 8 до Django - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь отправить данные с Angular на Django, и в моем браузере постоянно появляется следующее сообщение об ошибке:

HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:8000/polls/token", ok: false, …}
error:
error: SyntaxError: Unexpected token N in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttpRequest.onLoad (http://localhost:4200/vendor.js:32795:51) at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:6802:31) at Zone.runTask (http://localhost:4200/polyfills.js:6579:47) at ZoneTask.invokeTask [as invoke] (http://localhost:4200/polyfills.js:6876:34) at invokeTask (http://localhost:4200/polyfills.js:8014:14) at XMLHttpRequest.globalZoneAwareCallback (http://localhost:4200/polyfills.js:8051:21)
message: "Unexpected token N in JSON at position 0"
stack: "SyntaxError: Unexpected token N in JSON at position 0↵    at JSON.parse (<anonymous>)↵    at XMLHttpRequest.onLoad (http://localhost:4200/vendor.js:32795:51)↵    at ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:6802:31)↵    at Zone.runTask (http://localhost:4200/polyfills.js:6579:47)↵    at ZoneTask.invokeTask [as invoke] (http://localhost:4200/polyfills.js:6876:34)↵    at invokeTask (http://localhost:4200/polyfills.js:8014:14)↵    at XMLHttpRequest.globalZoneAwareCallback (http://localhost:4200/polyfills.js:8051:21)"
__proto__: Error
text: "None"
__proto__: Object
headers: HttpHeaders
lazyInit: () => {…}
lazyUpdate: null
normalizedNames: Map(0) {}
__proto__: Object
message: "Http failure during parsing for http://localhost:8000/polls/token"
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "http://localhost:8000/polls/token"
__proto__: HttpResponseBase

Я также получаю эту ошибку от django:

AttributeError at /polls/token
'NoneType' object has no attribute 'set_cookie'

Вот мой Angular интерфейс:

data.service.ts:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

const httpOptions = {
withCredentials: true,
};


@Injectable({
 providedIn: 'root'
})

export class DataService {

 constructor(private http: HttpClient) { }

 public sendPostRequest(data){
     return this.http.post("//localhost:8000/polls/token", data, httpOptions);
   }
}

вот выдержка из myapp.component.ts:

...

constructor(
    private dataService: DataService
  ) {}

...

this.auth2.attachClickHandler(
      element, 
      {},
      (googleUser) => {
        let token = googleUser.getAuthResponse().id_token;
        this.dataService.sendPostRequest(token).subscribe((data: any[])=>{
          console.log(data);
        });
      }, 
      (error) => {
        alert(JSON.stringify(error, undefined, 2));
      }
    );
...

console.log(token) возвращает длинную строку букв и цифр

А вот мой Django бэкэнд:

polls / views.py:

from django.conf import settings
from django.shortcuts import render
from django.http import HttpResponse, HttpRequest
from django.views.decorators.csrf import ensure_csrf_cookie


@ensure_csrf_cookie
def access_token(request: HttpRequest) -> HttpResponse:

    if request.method == 'POST':
        token = request.POST.get('body')
        return HttpResponse(token)

polls / urls.py:

from django.conf import settings
from . import views
from django.urls import path

urlpatterns = [
    path('token', views.access_token, name='access_token')

]

Я новичок в django и angular и уже несколько дней пытаюсь понять это. Кажется, я не могу понять, что именно не так.

Был бы очень признателен за помощь, Спасибо!

...