小编Mic*_*gas的帖子

如何正确使用 pg_restore 和 AWS RDS 来恢复 postgresql 数据库

我正在尝试将我的 Postgresql 数据库恢复到 AWS RDS。我想我快到了。我可以获得转储,并在本地重新创建数据库,但我错过了将其恢复到 AWS RDS 的最后一步。

这是我在做什么:

  1. 我得到我的转储

$ pg_dump -h my_public dns -U myusername -f dump.sql myawsdb

  1. 我在名为 test 的 shell 中创建了一个本地数据库:

create database test;

  1. 我将转储放入我的测试数据库

$ psql -U myusername -d test -f dump.sql

到目前为止,一切都很好。

I get an error: psql:dump.sql:2705: ERROR: role "rdsadmin" does not exist,但我想我可以忽略它,因为我的数据库包含所有内容。(我检查了 \list 和 \connect 测试)。

现在我想将此转储/测试恢复到我的 AWS RDS。

按照这个https://gist.github.com/syafiqfaiz/5273cd41df6f08fdedeb96e12af70e3b 我现在应该做:

pg_restore -h <host> -U <username> -c -d <database name> <filename to be restored>

但是我的文件名是什么,我的数据库名是什么?

我试过:

pg_restore -h mydns -U myusername …

django postgresql dump restore amazon-rds

12
推荐指数
1
解决办法
6817
查看次数

为 docker-compose 文件设置 pre-hook

我正在运行一个 dockerized django 应用程序,并且我正在寻找一种每次在构建 docker 容器之前运行指令的方法。更具体地说,我想docker-compose -f production.yml run --rm django python manage.py check --deploy每次在构建或建立 production.yml 文件之前运行,并在发生任何错误时停止构建过程。就像预钩一样。

我知道我可以使用 bash 脚本来实现此目的,但我想知道是否有办法在 docker-compose 文件中执行此操作。我在 docker 文档中找不到任何关于它的内容(事件除外,但我不明白它们是否服务于我想要实现的目标),我认为这是不可能的。然而,也许这实际上是可能的,或者也许有一个巧妙的解决方法?

预先感谢您的任何提示。

python django docker docker-compose

11
推荐指数
1
解决办法
8679
查看次数

Sys.path.insert 插入模块路径,但导入不起作用

我想在项目中导入一个模块,但由于导入错误给我带来了很多麻烦。所以我决定写一个小测试来看看问题出在哪里。我将一个文件夹添加到我的系统路径并尝试导入它。我得到一个Import Error: no module found named xyz

像这样:

import sys
import os

sys.path.insert(0, os.path.abspath('../../myfolder'))
import myfolder
print(sys.path)

Run Code Online (Sandbox Code Playgroud)

系统路径是['/Users/myuser/myproject/mywebsitefolder/myfolder/', ...]

myfolder包含一个__init__.py文件。将路径硬编码到 myfolder 具有相同的结果。网上的其他问题通过添加正确的路径或添加 init 来解决问题。但我认为两者都有,问题仍然存在。

我的印象是 python 在系统路径中查找可导入模块,或者我是否误解了它应该如何工作?

如果我理解正确的话,有什么办法可以进一步调试吗?或者这可能是 python 版本的问题?

非常感谢您的帮助。提前致谢!

编辑:这是我的目录结构

  • 我的网站文件夹
    • 我的文件夹
      • api_供应
        • 测试(包含我所有的测试和许多文件)
        • 初始化.py
        • 序列化器.py
        • urls.py
        • 视图.py
      • api_需求
        • 测试(包含我所有的测试和许多文件)
        • 初始化.py
        • 序列化器.py
        • urls.py
        • 视图.py
      • 迁移(文件夹)
      • 模板(文件夹)
      • 初始化.py
      • 管理员.py
      • 应用程序.py
      • 模型.py
      • 测试.py
      • urls.py
      • 视图.py

python django path sys sys.path

7
推荐指数
1
解决办法
9272
查看次数

Selenium 登录测试不接受用于登录的 pytest 固定装置或拒绝连接

我越来越绝望,因为我似乎无法为我认为会被所有人使用的解决方案找到解决方案。

我想用 selenium 和 pytest 用 live_server url 测试一个简单的登录。根据 pytest-django doc,一个名为的简单装置live_server应该可以解决问题(https://pytest-django.readthedocs.io/en/latest/helpers.html#live-server)。

不幸的是,当我将此夹具传递给我的测试并尝试使用它访问我的网站时,我得到:

本地主机拒绝连接

例如为此:

    def test_selenium(self, live_server, create_staff_user_in_db):
        browser = webdriver.Remote(
            command_executor='http://selenium:4444/wd/hub',
            desired_capabilities=DesiredCapabilities.CHROME,
        )

        browser.get(live_server.url)
Run Code Online (Sandbox Code Playgroud)

利用Selenium 无法登录到 Django LiveServerTestCase这个问题,我尝试使用不同的服务器夹具,然后连接我,我可以在 VNC 查看器中看到我的网站。

@pytest.fixture
def test_server() -> LiveServer:
    addr = socket.gethostbyname(socket.gethostname())
    server = LiveServer(addr)
    yield server
    server.stop()
Run Code Online (Sandbox Code Playgroud)

但是有了这个,如果我用我的装置在数据库中创建用户,我现在无法登录我的网站。即使看起来用户实际上是创建的。所以我的测试现在看起来像:


  def test_selenium(self, test_server, create_staff_user_in_db):
        browser = webdriver.Remote(
            command_executor='http://selenium:4444/wd/hub',
            desired_capabilities=DesiredCapabilities.CHROME,
        )

        browser.get(f"{live_server.url}/login")
        input_username = browser.find_element_by_name('username')
        input_password = browser.find_element_by_name('password')
        input_username.send_keys('testuserstaff')
        input_password.send_keys('mypasswordstaff')
        browser.find_element_by_xpath(
            '//*[@id="page-top"]/div[1]/div/div/div/div/form/button'
        ).click()

Run Code Online (Sandbox Code Playgroud)

我的用户夹具是:

@pytest.fixture()
def create_staff_user_in_db():
    User = …
Run Code Online (Sandbox Code Playgroud)

python selenium pytest docker

6
推荐指数
1
解决办法
480
查看次数

通过 API 调用发送大字典会中断开发服务器

我正在运行一个带有 postgreSQL 数据库的 django 应用程序,我正在尝试向数据库发送一个非常大的字典(由时间序列数据组成)。

我的目标是尽快将我的数据写入数据库。我正在使用库请求通过 API 调用(使用 django REST 构建)发送数据:

我的 API 视图很简单:

@api_view(["POST"])
def CreateDummy(request):

    for elem, ts in request.data['time_series'] :
        TimeSeries.objects.create(data_json=ts)

    msg = {"detail": "Created successfully"}
    return Response(msg, status=status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud)

request.data['time_series'] 是一个巨大的字典,结构如下:

{Building1: {1:123, 2: 345, 4:567 .... 31536000: 2345}, .... Building30: {..... }}
Run Code Online (Sandbox Code Playgroud)

这意味着我有30 个键和 30 个值,而每个值都是一个包含 31536000 个元素的字典。

我的 API 请求如下所示(其中 data 是我上面描述的字典):

 payload = {
            "time_series": data,
           } 

 requests.request(
        "post", url=endpoint, json=payload
    )
Run Code Online (Sandbox Code Playgroud)

该代码将时间序列数据保存到后端的 jsonb 字段中。现在,如果我只循环遍历字典的前 4 个元素,就可以了。我可以在大约 1 分钟内获得这些数据。但是当我遍历整个字典时,我的开发服务器关闭了。估计是内存不够。我得到一个requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote …

python django dictionary django-rest-framework

6
推荐指数
1
解决办法
215
查看次数

如何在 Django 中使用 Pytest 测试经过身份验证的 POST 请求

我想使用 Pytest 在 API 上测试经过身份验证的发布请求。这是我目前正在做的事情:

 def test_auth_user_can_create(self, client):
      
    
    url = api_reverse('crud-simulation_api')

    data = {
        "project": "testproject",
        ....
    }

        response = client.post(url, json=data)
        assert response.status_code == 200
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它返回 401(未授权)而不是 200。这是有道理的,因为夹具是客户端而不是管理员客户端。

然而,如果我传入 admin_client 而不是 client,它会给我一个错误的请求。不过,我发送的数据应该没问题。

我也尝试像这样传递标头(因为我使用 JWT 授权):

token = "bigassstringwhichismytoken"

headers = {
        "Authorization": "JWT " + token
    }
Run Code Online (Sandbox Code Playgroud)

最后我尝试登录之前给了我一个 403 (Forbidden):

def test_auth_user_can_create_simulation_api(self, client, django_user_model):
     
    username = "Jack"
    password = "password"

    django_user_model.objects.create_user(username=username, password=password)
    client.login(username=username, password=password)

    url = api_reverse('crud-simulation_api')

    data = {
        "project": "testproject",
        ...
    }

    response = client.post(url, json=data)
    assert …
Run Code Online (Sandbox Code Playgroud)

python django automated-tests pytest django-rest-framework

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

如何使用匿名函数正确调用D3.js中的其他函数

我试图使用匿名函数来调用其他两个函数,但无法真正使其工作。我关注了这个问题:Calling Two Functions on same click event with d3.js but still can't get it right。

期望的效果是我的条形图改变条形并同时改变颜色。这就是我正在尝试的:

我想调用的两个函数:

 function selectDataset(d) {
        let value = this.value;
        if (value == "total") {
            change(datasetTotal);
        } else if (value == "option1") {
            change(datasetOption1);
        } else if (value == "option2") {
            change(datasetOption2);
        }
    }

    function changeColor(d) {
         let value = this.value;
        if (value == "total") {
            d3.selectAll("rect")
                    .transition()
                    .duration(2000)
                    .style("fill", 'blue')
        } else if (value == "option1") {
            d3.selectAll("rect")
                    .transition()
                    .duration(2000)
                    .style("fill", 'red')
        } else …
Run Code Online (Sandbox Code Playgroud)

javascript anonymous-function d3.js

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

如何检查 django 模板中是否存在模型实例

我有一个带有基本模型(作业)的 Django 应用程序。现在,在我的模板中,我想检查该模型的实例是否存在。如果尚未显示任何内容,我想投影文本,否则我想显示模型属性。

不知怎的,就像这样(这显然不起作用):

{% if job.title != "" %}

{{ job.title }}

{% else %}

hola

{% endif %}

Run Code Online (Sandbox Code Playgroud)

还尝试过:

 {% for job in jobs %}

      {% if job.title %}
      {{ job.title }}
      {% else %}
      Hola
      {% endif %}

  {% endfor %}

Run Code Online (Sandbox Code Playgroud)

这是有道理的,它不起作用,因为我如何循环它或返回不存在的东西。有没有一种简单的方法可以在模板中做到这一点?或者我必须编写自己的函数?或者有什么方法可以做到这一点?

当然非常感谢帮助

python django exists django-templates

3
推荐指数
1
解决办法
6096
查看次数

使用 mailgun 发送电子邮件会抛出 401 Forbidden

我正在尝试使用 mailgun 和 python 发送一封简单的测试电子邮件。而我却彻底失败了。我遵循官方文档,我认为我做的一切都是正确的,但我总是收到401 Forbidden错误消息。

我做了什么,假设我的域名名为bubblegum.de

  1. 我设置了我的域。我使用 AWS Route 53,因此我按照说明和这篇文章进行操作https://simpleisbetterthancomplex.com/tutorial/2017/05/27/how-to-configure-mailgun-to-send-emails-in-a-django-应用程序.html

  2. 验证成功,所以我继续在设置中创建一个 API 密钥

  3. 然后我继续使用文档中的代码来尝试发送 API

import requests

def send_email():
    try:
        url = "https://api.mailgun.net/v3/mg.bubblegum.de/messages"
        status = requests.post(
            url,
            auth=("api", "MY-BUBBLY-GUMMY-APIKEY"),
            data={"from": "FROM-NAME mg.bubblegum.de",
                  "to":  "bigred@gum.de",
                  "subject": "Tasty bubblegum",
                  "text": "bubble",    
            }          
                  #"html": HTML-TEXT}
        )
        print(status)
        print(status.text)
        return status
    except Exception as e:
        raise e

send_email()
Run Code Online (Sandbox Code Playgroud)

我也尝试使用url = "https://api.mailgun.net/v3/bubblegum.de/messages"(没有毫克),但同样的问题。

现在,无论我尝试多少个 API 密钥,我总是能得到401 Forbidden. 我很确定我使用的是正确的 API 密钥:)...

我确信它一定是与域有关的东西,或者我忽略了一些东西......不知道我做错了什么。非常感谢您的帮助。非常感谢!

python amazon-web-services amazon-route53 mailgun

3
推荐指数
1
解决办法
1417
查看次数

REST 中的多对多字段和嵌套序列化器:覆盖嵌套序列化器不会在 Django 中创建嵌套对象

我有两个具有多对多关系的模型,我正在尝试将嵌套数据发送到我的 API。不幸的是它只给我返回一个空数组。

这就是我正在尝试的:

我的模型:


class Building(models.Model):
    name  = models.CharField(max_length=120, null=True, blank=True)
    net_leased_area = models.FloatField(null=True, blank=True)

class BuildingGroup(models.Model):
    description           = models.CharField(max_length=500, null=True, blank=True)
    buildings             = models.ManyToManyField(Building, default=None, blank=True)

Run Code Online (Sandbox Code Playgroud)

我的通用 API 视图:

class BuildingGroupCreateAPIView(CreateAPIView):
    queryset                    = BuildingGroup.objects.all()
    serializer_class            = BuildingGroupSerializer
Run Code Online (Sandbox Code Playgroud)

我的序列化器:


class BuildingGroupSerializer(serializers.ModelSerializer):

    buildings = BuildingSerializer(many=True)

    class Meta:

        model = BuildingGroup

        fields = (
            'description',
            'buildings',
        )

    def create(self, validated_data):
        buildings_data = validated_data.pop('buildings')
        building_group = BuildingGroup.objects.create(**validated_data)
        for building_data in buildings_data:
            Building.objects.create(building_group=building_group, **building_data)
        return building_group

Run Code Online (Sandbox Code Playgroud)

当我发送数据时它返回:


{"description":"Test Description API","buildings":[]}

Run Code Online (Sandbox Code Playgroud)

在数组中我想要有我的字典数组。

当我覆盖 create 方法以发送嵌套对象时,我尝试遵循此处的 …

django django-models django-serializer django-rest-framework

2
推荐指数
1
解决办法
3525
查看次数

在值之前和之后用零动态填充Javascript数组的算法

我使用python / django动态获取了几个月的数据,并将其传递给我的模板。在那里我使用Javascript操纵数据

这意味着我的模板中有一个javascript数组,每个数字都代表一个月,如下所示:

months = [1,2,3,4]

或者:

months = [4,5,6]

或者:

months = [6,7,8]

根据上面的数组,我想用零填充缺失的位置。缺少位置意味着该数组的末尾长度应为12。每个月都应处于正确的位置。例如:

months = [1,2,3,4,0,0,0,0,0,0,0,0]

或者

months = [0,0,0,4,5,6,0,0,0,0,0,0]

或者

months = [0,0,0,0,0,6,7,8,0,0,0,0]

我尝试了很多事情。Splicing似乎是个好方法,但效果不理想。我无法使用解决它Array.fill。我还尝试创建一个具有12个零的新数组,然后将另一个数组的值推入其中,但这没有用。

有人可以指出我正确的方向还是有想法?非常感谢。

javascript python arrays django

-2
推荐指数
1
解决办法
65
查看次数