小编Mar*_*ind的帖子

Django Admin,保存时调用函数

我的Django网站上有一个处理博客帖子的应用程序.发布博客文章时,我想在第三方应用程序上安排一个通讯,通知订阅者新帖子.

因此,我想添加一个自定义函数,以便在保存博客文章时调用,我可以将此API调用写入新闻稿服务.

这该怎么做?试图查看文档,我能找到的就是管理操作,这似乎不是我想要的.

python django

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

wkhtmltopdf没有执行javascript

我正在尝试渲染HTML页面的pdf.在HTML的最后我有一个非常简短的jQuery脚本.

执行wkhtmltopdf后,它会渲染所有HTML,但是没有为PDF文件加载Javascript.所以似乎wkhtmltopdf忽略了我的Javascript,或者它在运行javascript之前生成了.pdf.

我已尝试使用$(document).ready和without,没有结果.我试过--debug-javascript没有检索到任何信息.

有任何想法吗?

php wkhtmltopdf

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

脚本运行后,SQS消息永远不会被删除/删除

我遇到的问题是我的SQS消息永远不会从SQS队列中删除.只有在生命周期结束时才会删除它们,即4天.

所以总结一下应用程序:

  • 将URL发送到SQS队列以等待爬网

  • 向Elastic Beanstalk App发送消息,抓取数据并将其存储在数据库中

该脚本似乎工作的意思是它确实收到了消息,它确实成功抓取它并将数据成功存储在数据库中.唯一的问题是消息保留在队列中,卡在"可用消息"中.

所以,如果我例如用800条消息加载队列.它会在大约800条消息中停留4天,然后由于生命周期的价值,它们将立即被删除.似乎有一些消息被删除,因为数字略有变化,但大部分消息从未从队列中删除.

所以问题:

  • Isnt SQS假设在脚本发送和接收后立即删除消息?

  • 我是否有手动方式在脚本本身删除当前消息?据我所知,消息只发送1路.来自SQS - > App.所以据我所知,我不能做SQS < - > App.

有任何想法吗?

amazon-sqs amazon-web-services amazon-elastic-beanstalk

5
推荐指数
2
解决办法
2935
查看次数

检查页面内容是否已更改的最佳方法?

我有一个爬网程序,可以抓取数十万个页面并索引/解析页面内容,我正在努力解决的一件事是检查页面内容是否已更新,以一种有效的方式,而不必抓取它并检查页面的内容。

显然,我可以只加载整个页面,然后重新解析所有内容并将其与我存储在数据库中的内容进行比较。然而,这是非常低效的并且使用大量计算导致高托管费用。

我正在考虑比较哈希值,问题在于如果页面更改了单个字节或字符,则哈希值会有所不同。例如,如果页面在页面上显示当前日期,则每次哈希都会不同,并告诉我内容已更新。

所以……你会怎么做?你会看看 HTML 的 kb 大小吗?您是否会查看字符串长度并检查例如长度更改是否超过 5%,内容是否已“更改”?或者是否有某种散列算法,如果仅更改了字符串/内容的一小部分,则散列值保持不变?

php python hash web-crawler

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

使用 Amazon Web Services 自动调度 Scrapy Crawler

我有一个使用 Python 的 Scrapy 的爬虫/蜘蛛,我想使用 Amazon Web Services 安排每日爬行。

我想做的是,每天,假设 01:00 UTC。我希望创建一个 ec2 实例并启动 Scrapy 蜘蛛并运行爬行,完成后我希望终止 ec2 实例。

我不希望 ec2 实例继续运行并增加额外的成本/费用,因为将来我将添加更多蜘蛛,这可能会导致每天 20 小时不执行任何操作的十几个被动实例。

我发现了一些关于将 Scrapy 与 ec2 结合使用的帖子:

但所有这些似乎都要求您每次想要安排爬网时都从本地计算机启动该脚本。这似乎不是自动完成的。我希望我的脚本一年 365 天运行,持续 10 年以上,而且我不想每天晚上睡觉前都运行它。

有人可以描述如何使用 Amazon Web Services 完成此操作吗?

python amazon-ec2 amazon-web-services scrapy scrapyd

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

S3上的Django静态文件:S3ResponseError:301永久移动

我正在尝试在Amazon S3上托管我的Django静态和媒体文件,我一直在关注每个指南,但是S3ResponseError: 301 Moved Permanently当我试图运行时,我仍然在部署我的Elastic Beanstalk应用程序时遇到错误collectstatic.

我的S3工作正常,我可以访问其他文件.我还将其设置为自定义域,以便您可以通过以下方式访问同一文件:

  1. http://s3.condopilot.com.s3-eu-west-1.amazonaws.com/thumbs/big/3fca62e2150e8abec3f693a6eae8d2f79bb227fb.jpg
  2. https://s3-eu-west-1.amazonaws.com/s3.condopilot.com/thumbs/big/3fca62e2150e8abec3f693a6eae8d2f79bb227fb.jpg
  3. http://s3.condopilot.com/thumbs/big/3fca62e2150e8abec3f693a6eae8d2f79bb227fb.jpg

这是我想要使用的第三个选项,但我也尝试过其他选项.https://在下面的设置中有和没有.

我的设置文件看起来像这样

#settings.py file
AWS_ACCESS_KEY_ID = 'XXX'
AWS_SECRET_ACCESS_KEY = 'XXX'
AWS_HEADERS = { 
    'Expires': 'Thu, 31 Dec 2099 20:00:00 GMT',
    'Cache-Control': 'max-age=94608000',
}
AWS_STORAGE_BUCKET_NAME = 's3.condopilot.com'
# I have also tried setting AWS_S3_CUSTOM_DOMAIN to the following:
# - "s3-eu-west-1.amazonaws.com/%s/" % AWS_STORAGE_BUCKET_NAME
# - "s3-eu-west-1.amazonaws.com/%s" % AWS_STORAGE_BUCKET_NAME
# - "s3.condopilot.com"
AWS_S3_CUSTOM_DOMAIN = "%s.s3-eu-west-1.amazonaws.com" % AWS_STORAGE_BUCKET_NAME
AWS_S3_CALLING_FORMAT = 'boto.s3.connection.OrdinaryCallingFormat'
AWS_S3_SECURE_URLS = False # Tried both True …
Run Code Online (Sandbox Code Playgroud)

django amazon-s3 amazon-web-services

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

使用RxJS从订阅中返回Observable

我目前有一项服务,它向API发送HTTP请求以获取数据.我想从服务中对observable做一些逻辑,但我仍然想在我的Component中订阅Observable,这样我就可以将任何错误返回给Component和用户.

目前我这样做:

// service.ts
getData(): Observable<any> {
    return this.http.get(url).pipe(catchError(this.handleError)
}

// component.ts
ngOnInit() {
    this.service.getData().subscribe(res => {
        // Do my logic that belong to the service.ts
        // ...

        // Do my logic that belongs in the component.ts
        // ...
    }, err => this.errors = err)
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是重构这个,以便我在getData()方法中处理与订阅和service.ts相关的逻辑,然后返回一个带有HTTP响应的Observable和任何错误给Component,这样我就可以了可以继续在那里做事.

这样做的模式是什么?

javascript rxjs angular

4
推荐指数
1
解决办法
6626
查看次数

AWS Elastic Beanstalk Docker 容器的重启策略

我有一个多容器 Elastic Beanstalk 应用程序,其中包含 4 种类型的容器。其中一个容器的scrapinghub/splash设计方式是,您可以设置容器应关闭的最大内存限制,然后您可以使用restart: always重新启动它的策略来运行它。

从我在语法中看到的情况来看,Dockerrun.aws.json没有什么像正常的 docker-compose 重新启动策略一样需要定义。根据我在其他资源上发现的情况,推荐的方法是创建一个 ECS 服务,该服务在任务失败时重新启动任务。

但是 - 请注意,我不想重新启动包括所有容器的整个任务,我只想重新启动其中一个容器。如果我重新启动整个任务,那么所有其他工作进程将停止运行。

那么我该怎么做呢?如何确保容器关闭后立即重新启动 - 而无需重新启动或重新部署整个任务?就像正常的 docker-compose 重启策略设置一样。

amazon-web-services docker amazon-elastic-beanstalk

4
推荐指数
1
解决办法
2062
查看次数

以Django形式翻译占位符

我在翻译文本输入字段的占位符文本时遇到问题.我已经将我的.po文件翻译为占位符的翻译,当我加载我的页面时,所有翻译工作正常,除了这个单独的占位符.是的,我编译了我的翻译文件.

似乎它不明白它应该显示翻译版本.也许创建表单时没有知道当前语言是什么的上下文.

如何解决这个问题?如何在Django中的窗体小部件中翻译占位符?

这是我的forms.py文件:

from django import forms
from django.utils.translation import ugettext as _

class InlineSearch(forms.Form):
    query = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control input-lg', 'placeholder':_('Search for a country, city or address here...')}), localize=True    )
Run Code Online (Sandbox Code Playgroud)

这是我的模板.html文件:

{% load i18n %}
<div class="inline-search">
    <div class="container">
        <form method="get" action="">
            <div class="input-group">
                {% for field in formset %}
                    {{field}}
                {% endfor %}
                <span class="input-group-btn">
                    <button type="submit" action="submit" class="btn btn-primary btn-lg"><i class="fa fa-search"></i> {% trans "Search" %}</button>
                </span>
            </div>
        </form>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我的.po文件:

#: .\search\forms.py:5
msgid "Search for a …
Run Code Online (Sandbox Code Playgroud)

python django

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

Django过滤器,其中ManyToMany字段包含所有列表

我有一个CartItem带有ManyToMany字段的AttributeChoice模型到模型.例如,a CartItem可以具有AttributeChoice"小"和"红色".

我想找到我的CartItem两个都有"小"和"红"的属性.如果我执行以下操作:

CartItem.objects.get(cart=cart, product=product, attribute__in=attribute_list)
Run Code Online (Sandbox Code Playgroud)

"小"和"红" attribute_listAttributeChoice对象列表在哪里.然后我也会得到只有"小"或"红"的对象,但不是两者.

所以这个查询都匹配:

  • CartItem A,小,红色
  • CartItem B,小
  • CartItem C,红色

虽然我想要的是一个只能匹配CartItem A的查询.

现在......我可以创建很多AND语句,但我需要一个灵活的解决方案,可以包含1或100个要过滤的属性.所以传递它的对象列表会很棒.

想法?

python django

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