Как получить доступ к сессии 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',
]
Я все еще учусь, поэтому не уверен, что я упускаю или делаю неправильно. Есть предложения?