Как получить доступ к сессии Django, используя представления на основе классов? (с Angular) Self.request.session.get('key') возвращает None

В настоящее время я разрабатываю приложение Django/Angular. В компоненте фронтенда несколько методов вызываются при инициализации (ngOnInit), и все эти методы опираются на один и тот же базовый запрос (а затем они делают другие вещи с этими данными). Я пытаюсь создать один метод, который бы извлекал базовые данные, используемые другими методами. В настоящее время я делаю один запрос к этим базовым данным, храню их в сессии Django, а затем обращаюсь к ним из других представлений по мере необходимости (я буду благодарен за любые альтернативные точки зрения, если вы считаете, что это не очень хорошее решение).

Проблема в том, что я не могу получить доступ к сессии Django за пределами представления, в котором она создается. Всякий раз, когда я пытаюсь получить к ней доступ из других представлений, я получаю 'None'.

Вот упрощенная версия моего кода Angular:

export class AnalysisComponent {
fieldID = 4;
constructor(private _service: Service) {}

async ngOnInit() {
    await this.getBaseData(this.fieldID); // I used async/await so the other methods do not execute until this one is over.
    this.testOne(this.fieldID);
    this.testTwo(this.fieldID);
    this.testThree(this.fieldID);
}

async getBaseData(field_id){
    try {
      const result = await this._service.getBaseData(field_id).toPromise();
    } catch (error) {
      console.error(error);
    }
}

testOne(field_id) { 
this._service.testOneView(field_id).subscribe(
      (data: any) => {
      // blah blah
      }
}

testTwo(field_id) { 
this._service.testTwoView(field_id).subscribe(
      (data: any) => {
      // blah blah
      }
}

testThree(field_id) { 
this._service.testTwoView(field_id).subscribe(
      (data: any) => {
      // blah blah
      }
}

и вот мои представления Django:

class getBaseData(ListCreateAPIView):
    serializer = baseSerializer

    def post(self, request, *args, **kwargs):
        id = request.data['field_id']
        queryset = Table.objects.filter(id=id)
        response = self.serializer(queryset, many=True, read_only=True)

        self.request.session['example_session'] = response.data
        request.session.save()
        
        print(self.request.session['example_session'] ) // This prints the data ok
        print(request.session.session_key) // This prints the session key
        return JsonResponse(response.data, safe=False)


class testOneView(ListCreateAPIView):
    def post(self, request, *args, **kwargs):
        get_example_sesion = self.request.session.get('example_session')
        print("request.session.session_key", request.session.session_key) // This returns None
        print(get_example_sesion) // This also returns None

class testTwoView(): // Happens the same as testOneView

class testThreeView(): // Happens the same as the other two

вот мои настройки django:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Я все еще учусь, поэтому не уверен, что я упускаю или делаю неправильно. Есть предложения?

Вернуться на верх