小编pat*_*ick的帖子

在 JSON 请求中发送 csrf_token(无ajax)

我正在尝试使用 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)

javascript django json django-csrf

5
推荐指数
1
解决办法
3265
查看次数

在 Github Actions 中为 Django 设置 postgres

我目前正在 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)

django django-testing django-postgresql github-actions

4
推荐指数
2
解决办法
1392
查看次数