Токен CSRF в Angular 17 с использованием django
Я использую django для бэкенда и для POST/GET запроса я использую эту функцию, которая
def player_list(request):
    if request.method == 'GET':
        players = Player.objects.all().values() # get all players as Python dictionaries
        player_list = list(players)
        return JsonResponse(player_list, safe=False)
    elif request.method == 'POST':
        try:
            data = json.loads(request.body) # load JSON data from request
            player = Player(**data) # create a new player instance
            player.full_clean()  # validate the player instance
            player.save() # save the player instance to the database
            return JsonResponse({'message': 'Player created successfully.'}, status=201)
        except json.JSONDecodeError:
            return HttpResponse('Invalid JSON', status=400)
        except ValidationError as e:
            return JsonResponse({'error': e.message_dict}, status=400)
    else:
        return HttpResponse('Invalid HTTP method', status=405)
если я добавляю @csrf_exempt над моей функцией, то она получает POST данные в базу данных, иначе мое приложение Angular выдает мне 403 ошибку. даже я добавил в app.module.ts
imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    FormsModule,
    HttpClientXsrfModule.withOptions({
      cookieName: 'csrftoken',
      headerName: 'X-CSRFToken'
    })
  ],
и мой POST-функционал в сервисе
 postPlayers(player: Player): Observable<any>
 {
    return this.http.post(this.url, player, { headers: { Accept: 'application/json' }});
 }
Я новичок, поэтому не могу разобраться. кто-нибудь может мне помочь, пожалуйста?
Данные должны храниться в базе данных с CSRF-токеном, но этого не происходит.
шаг1
Либо в вашем коде Angular используется стандартное имя заголовка csrf
имя заголовка csrf по умолчанию:
HTTP_X_CSRFTOKEN
или
в файле django settings.py задайте пользовательское имя для заголовка csrf:
CSRF_HEADER_NAME = 'X-CSRFToken'
step2
на файле settings.py от django
a. Убедитесь, что CSRF_COOKIE_HTTPONLY установлен на False
По умолчанию: False
Использовать ли флаг HttpOnly для CSRF-куки. Если установлено значение True, клиентский JavaScript не сможет получить доступ к CSRF-куки.
b. Убедитесь, что CSRF_USE_SESSIONS установлен на False
По умолчанию: False
Хранить ли CSRF-токен в сессии пользователя, а не в куках.
step3
в Angular 17, в файле app.config.ts
 Добавьте withXsrfConfiguration к вызову provideHttpClient следующим образом:
export const appConfig: ApplicationConfig = {
  providers: [
    provideHttpClient(
      withXsrfConfiguration({
        cookieName: 'csrftoken',
        headerName: 'X-CSRFToken',
      }),
    ),
  ]
};