我正在尝试使用 csrf 令牌向我的 Django 应用程序发送 JSON 请求,但我不知道如何操作。我已将令牌放入可以引用的变量中,但我不知道如何使用 fetch 通过 JSON 请求发送它。我已添加'csrfmiddlewaretoken': csrftoken到正文的 JSON.stringify 部分,但仍然收到错误消息 403 Forbidden。有人可以帮我解决这个问题吗?谢谢你!(抱歉代码上有奇怪的缩进)
JavaScript 文件:
fetch('/update', {
method: 'PUT',
body: JSON.stringify({
'csrfmiddlewaretoken': csrftoken,
'liked': true,
'post_id': parseInt(button.dataset.post_id)
})
})
Run Code Online (Sandbox Code Playgroud)
视图.py:
data = json.loads(request.body)
try:
content = data.get('content')
except:
JsonResponse({'error': 'content required'}, status=400)
try:
id = data.get('id')
post = Post.objects.get(id=id)
except:
JsonResponse({'error': 'post not found'}, status=400)
if request.user == post.user:
post.content = content
post.save()
return JsonResponse({'message': f'received: {content}'})
return JsonResponse({'error': "can't edit this user's posts"}, status=403)
Run Code Online (Sandbox Code Playgroud) 我目前正在 Django 上开发一个网站。在我的计算机上,我在带有 postgres 数据库的 Docker 上运行它。这是我拥有的 docker-compose 文件:
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
Run Code Online (Sandbox Code Playgroud)
这是 settings.py 中的相关部分
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用此设置在 docker 容器中运行我的测试时,它可以找到并运行测试。但是,在 github 操作中,它不起作用。这是我的工作流文件:
name: Django CI
on: push
jobs:
build:
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: [3.7, 3.8]
services:
db:
image: postgres
env:
POSTGRES_DB: …Run Code Online (Sandbox Code Playgroud)