Запрос GraphiQL, возвращающий CSRF_FAILURE_VIEW - PullRequest
0 голосов
/ 07 октября 2019

Я просто делаю учебник @ https://docs.graphene -python.org / projects / django / en / latest / tutorial-plain / , чтобы понять graphQL и графен с помощью Django 2.

Я некоторое время не использовал Django, и похоже, что это Django 11. Я получаю CSRF_FAILURE_VIEW, когда пытаюсь выполнить запрос GraphQL следующим образом:

query {
  allIngredients {
    id
    name
  }
}

Базовое приспособление jsonвыглядит так:

[{"model": "ingredients.category", "pk": 1, "fields": {"name": "Dairy"}}, {"model": "ingredients.category", "pk": 2, "fields": {"name": "Meat"}}, {"model": "ingredients.ingredient", "pk": 1, "fields": {"name": "Eggs", "notes": "Good old eggs", "category": 1}}, {"model": "ingredients.ingredient", "pk": 2, "fields": {"name": "Milk", "notes": "Comes from a cow", "category": 1}}, {"model": "ingredients.ingredient", "pk": 3, "fields": {"name": "Beef", "notes": "Much like milk, this comes from a cow", "category": 2}}, {"model": "ingredients.ingredient", "pk": 4, "fields": {"name": "Chicken", "notes": "Definitely doesn't come from a cow", "category": 2}}]

Простите нубу, но должно быть что-то изменилось с Django 2? Есть ли другой параметр, который мне нужно применить?

В settings.py у меня есть:

GRAPHENE = {
    'SCHEMA': 'cookbook.schema.schema'
}

Моя структура папок немного отличается от того, что мое приложение с ингредиентами не вложено вмое приложение поваренной книги. Приложение «Поваренная книга» - это основное приложение примерно так:

enter image description here

1 Ответ

0 голосов
/ 07 октября 2019

Краткий ответ: добавьте csrf_exempt к вашему urls.py [0]

Длинный ответ:

Защита от CSRF не является чем-то новым в Django [1], вы обычно добавляете {{csrf_token}}к вашему шаблону, а затем либо используйте его (или файл cookie csrftoken) в качестве заголовка X-CSRFToken в запросах POST к серверу. Однако, если вы проводите тестирование с помощью Postman или аналогичного средства, действительный токен CSRF не используется, поэтому лучше всего не давать вашим представлениям ожидать токен CSRF, что и делает функция csrf_exempt, описанная выше.

[0] https://github.com/graphql-python/graphene-django/issues/61#issuecomment-261199128

[1] https://docs.djangoproject.com/en/2.2/ref/csrf/

...