我正在尝试将我的 Postgresql 数据库恢复到 AWS RDS。我想我快到了。我可以获得转储,并在本地重新创建数据库,但我错过了将其恢复到 AWS RDS 的最后一步。
这是我在做什么:
$ pg_dump -h my_public dns -U myusername -f dump.sql myawsdb
create database test;
$ 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 …
我正在运行一个 dockerized django 应用程序,并且我正在寻找一种每次在构建 docker 容器之前运行指令的方法。更具体地说,我想docker-compose -f production.yml run --rm django python manage.py check --deploy每次在构建或建立 production.yml 文件之前运行,并在发生任何错误时停止构建过程。就像预钩一样。
我知道我可以使用 bash 脚本来实现此目的,但我想知道是否有办法在 docker-compose 文件中执行此操作。我在 docker 文档中找不到任何关于它的内容(事件除外,但我不明白它们是否服务于我想要实现的目标),我认为这是不可能的。然而,也许这实际上是可能的,或者也许有一个巧妙的解决方法?
预先感谢您的任何提示。
我想在项目中导入一个模块,但由于导入错误给我带来了很多麻烦。所以我决定写一个小测试来看看问题出在哪里。我将一个文件夹添加到我的系统路径并尝试导入它。我得到一个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 版本的问题?
非常感谢您的帮助。提前致谢!
编辑:这是我的目录结构
我越来越绝望,因为我似乎无法为我认为会被所有人使用的解决方案找到解决方案。
我想用 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) 我正在运行一个带有 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 …
我想使用 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) 我试图使用匿名函数来调用其他两个函数,但无法真正使其工作。我关注了这个问题: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) 我有一个带有基本模型(作业)的 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)
这是有道理的,它不起作用,因为我如何循环它或返回不存在的东西。有没有一种简单的方法可以在模板中做到这一点?或者我必须编写自己的函数?或者有什么方法可以做到这一点?
当然非常感谢帮助
我正在尝试使用 mailgun 和 python 发送一封简单的测试电子邮件。而我却彻底失败了。我遵循官方文档,我认为我做的一切都是正确的,但我总是收到401 Forbidden错误消息。
我做了什么,假设我的域名名为bubblegum.de
我设置了我的域。我使用 AWS Route 53,因此我按照说明和这篇文章进行操作https://simpleisbetterthancomplex.com/tutorial/2017/05/27/how-to-configure-mailgun-to-send-emails-in-a-django-应用程序.html
验证成功,所以我继续在设置中创建一个 API 密钥
然后我继续使用文档中的代码来尝试发送 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 密钥:)...
我确信它一定是与域有关的东西,或者我忽略了一些东西......不知道我做错了什么。非常感谢您的帮助。非常感谢!
我有两个具有多对多关系的模型,我正在尝试将嵌套数据发送到我的 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
我使用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个零的新数组,然后将另一个数组的值推入其中,但这没有用。
有人可以指出我正确的方向还是有想法?非常感谢。
django ×8
python ×8
docker ×2
javascript ×2
pytest ×2
amazon-rds ×1
arrays ×1
d3.js ×1
dictionary ×1
dump ×1
exists ×1
mailgun ×1
path ×1
postgresql ×1
restore ×1
selenium ×1
sys ×1
sys.path ×1