В приложении Django я хочу сохранить JSON в базе данных, используя API fetch / post.Две проблемы: (1) у меня проблемы с проверкой CSRF, и (2) я не уверен в том, чтобы использовать POST для изменения БД в целом.
У меня есть модель "Job" с полем, которое должноHold JSON.
class Job(models.Model):
job_id = models.IntegerField()
setup_json = models.CharField(max_length=100000, blank=True, null=True)
JSON создается при взаимодействии пользователя на странице.Когда я нажимаю кнопку «Сохранить», я хочу записать JSON в поле setup_json
правильного задания.
Я не хочу использовать форму, потому что JSON хранится в JavaScript, а не внаписано в любом месте на странице.Поэтому я получаю токен CSRF из шаблона для непосредственного использования, например:
{% csrf_token %}
<script type="text/javascript">
const csrftoken = document.getElementsByName("csrfmiddlewaretoken")[0].value;
</script>
(Примечание: в моем файле "settings.py" я добавил строку CSRF_USE_SESSIONS = True
вчтобы использовать эту технику.)
Затем моя кнопка сохранения вызывает такую функцию:
function onPressSave() {
fetch(`webapp/api/save-json/${jobId}`, {
method: "POST",
headers: {
"X-Requested-With": "XMLHttpRequest",
"X-CSRF-Token": csrftoken,
"Content-Type": "application/json; charset=utf-8",
Accept: "application/json"
},
credentials: "same-origin",
body: JSON.stringify("test json")
});
}
Я получаю ошибку «POST 403 (Forbidden)» в консоли.Любая помощь с этим будет принята с благодарностью!
Я также немного не уверен, как должна выглядеть функция приема.В настоящее время это выглядит так:
def save_json(request, id):
j = Job.objects.get(job_id=id)
j.setup_json = json.dumps(dict(name="testing"))
return HttpResponse("OK")
В конечном итоге я хочу получить правильный JSON из запроса POST, но похоже, что я на правильном пути с этой функцией?