小编jam*_*esc的帖子

FCM注册ID令牌的最大长度是多少?

使用"新"Firebase云消息传递,我希望可靠地将客户端设备registration_id令牌保存到本地服务器数据库,以便服务器软件可以向他们发送推送通知.

我应该使用哪个最小的数据库字段大小来保存100%的客户端注册令牌?

我已经发现了两个不同 的库使用TextFieldVarChar(255),但没有明确界定的最大长度.另外,我希望服务器代码在接收令牌时进行快速检查以确保它们"看起来"正确 - 什么是一个好的最小长度和要检查的字符集?

firebase firebase-cloud-messaging

27
推荐指数
2
解决办法
3万
查看次数

Django在views.py中进行了docte

有关测试的Django 1.4 文档说明:

对于给定的Django应用程序,测试运行器在两个位置查找doctests:

  • models.py文件.您可以为单个模型定义模块级doctests和/或doctest.通常的做法是将应用程序级doctests放在模型docstring中的模块docstring和模型级doctests中.

  • tests.py在应用程序目录中调用的文件- 即包含models.py的目录.此文件是您要编写的任何和所有doctest的钩子,它们不一定与模型相关.

出于好奇,我想知道为什么Django的testrunner仅限于doctests models.py,但更实际上我想知道如何views.py在运行时扩展testrunner的doctests包括(例如)和其他模块manage.py test.

我很感激任何意见.

谢谢.

布赖恩

python django doctest unit-testing

23
推荐指数
4
解决办法
3072
查看次数

Python`socket.getaddrinfo`占用了大约0.1%的请求5秒

在与各种Web服务进行通信的Django项目上运行Python,我们遇到一个问题,偶尔请求大约需要5秒而不是通常的<100毫秒.

我把这个缩小到了socket.getaddrinfo函数的时间- requests当我们连接到外部服务时调用它,但它似乎也影响了集群中Postgres数据库框的默认Django连接.当我们uwsgi在部署后重新启动时,第一个进入的请求将花费5秒钟来发送响应.我也相信我们的芹菜任务定期需要5秒,但我还没有添加statsd计时器跟踪.

我写了一些代码来重现这个问题:

import socket
import timeit

def single_dns_lookup():
    start = timeit.default_timer()
    socket.getaddrinfo('stackoverflow.com', 443)
    end = timeit.default_timer()
    return int(end - start)

timings = {}

for _ in range(0, 10000):
    time = single_dns_lookup()
    try:
        timings[time] += 1
    except KeyError:
        timings[time] = 1

print timings
Run Code Online (Sandbox Code Playgroud)

典型的结果是 {0: 9921, 5: 79}

我的同事已经指出了围绕ipv6查找时间的潜在问题,并将其添加到/etc/gai.conf:

precedence ::ffff:0:0/96  100
Run Code Online (Sandbox Code Playgroud)

这肯定改进了curl我们使用的非Python程序的查找,但不是来自Python本身.服务器盒正在运行Ubuntu 16.04.3 LTS,我可以在Python 2的vanilla虚拟机上重现这一点.

我可以采取哪些步骤来提高所有Python查找的性能,使它们可以<1s?

python sockets dns python-requests

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

如何生成Angular应用程序的服务器端PDF?

我们有一个Angular(v4)应用程序,该应用程序根据API接收到的JSON数据和文件存储中的图像生成表单。每个使用该应用程序的客户端都有(数百种)包含不同数据和图像的表单。请求了一项功能,该功能将允许客户端将其表单导出为zip中的PDF。

我们正在为该解决方案探索的策略是,当接收到客户端的导出请求时,服务器将加载客户端可以在无头浏览器中访问的每个表单,Angular将构建该表单,然后服务器将要求浏览器执行以下操作:生成PDF屏幕截图。然后将这些PDF压缩并通过电子邮件或下载链接发送给客户端。

我们遇到的问题是,无法从服务器端生成Angular应用的屏幕截图。

作为一个更简单的测试站点,我们也一直试图使这些工具中的任何一个都可以与当前的Angular文档站点-https: //angular.io/guide/quickstart一起使用。到目前为止,所有尝试都失败了:

  • wkhtmltopdf-获取我们正在加载的用户信息微调框,但即使等待90秒也没有内容到达。我们在JS输出中得到错误。

    这是我们一直用来捕捉Angular docs网站的命令,该网站仅生成白色PDF:

    ~/render/wkhtmltox/bin$ ./wkhtmltopdf --debug-javascript --no-stop-slow-scripts --javascript-delay 90000 https://angular.io/guide/quickstart angular_quickstart.pdf 
    Loading pages (1/6)
    Warning: undefined:0 TypeError: setting a property that has only a getter
    Counting pages (2/6)                                               
    Resolving links (4/6)                                                       
    Loading headers and footers (5/6)                                           
    Printing pages (6/6)
    Done             
    
    Run Code Online (Sandbox Code Playgroud)
  • PhantomJS-似乎比wkhtmltopdf可以进入“正在加载内容”微调器的功能要好一些,这意味着该应用程序知道它已登录的用户。但是,即使在等待和轮询DOM更改时,初始设置之后我们也没有任何更改加载。

    当使用Angular docs网站时,这也会失败并显示白屏:

    ~/render/phantomjs-2.1.1-linux-x86_64$ bin/phantomjs examples/rasterize.js https://angular.io/guide/quickstart angular_quickstart.pdf 
    ReferenceError: Can't find variable: WeakMap
    
      https://angular.io/main.f0610805f4aad19da4be.bundle.js:1 in cDNt
      https://angular.io/inline.2826385ad3e299c6d1c1.bundle.js:1 in n
      https://angular.io/main.f0610805f4aad19da4be.bundle.js:1
      https://angular.io/inline.2826385ad3e299c6d1c1.bundle.js:1 in n
      https://angular.io/inline.2826385ad3e299c6d1c1.bundle.js:1 in webpackJsonp
    
    Run Code Online (Sandbox Code Playgroud)
  • Puppeteer-我们尚未完全探究无头的Chrome,但是使用https://try-puppeteer.appspot.com/和Angular docs网站进行的初始测试因以下原因而失败:

    Error …
    Run Code Online (Sandbox Code Playgroud)

pdf wkhtmltopdf phantomjs angular puppeteer

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

如何使用SQLAlchemy在PostgreSQL ARRAY中的某个位置选择值?

对于嵌套注释系统,我使用Comment模型中的以下定义将树结构存储在PostgreSQL表中:

path = sa.Column(ARRAY(sa.Integer))
Run Code Online (Sandbox Code Playgroud)

这会将注释的所有ID存储在当前注释的路径中.因此,如果id15 的评论是11和13的孩子,那么它的路径就是[11,13,15].

现在我想找到并计算孩子的评论.所以为了找到评论11的所有孩子,包括我自己,我想生成如下的SQL:

SELECT id, path FROM comments WHERE path[1] = 11;
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,这很快就会返回一组很好的注释11及其子代.

通过上面的例子,如果我想抓住评论的孩子,我可以使用以下SQL:

SELECT id, path FROM comments WHERE path[1] = 11 AND path[2] = 13;
Run Code Online (Sandbox Code Playgroud)

如何使用SQLAlchemy生成此SQL?

我已经乱砍了filter_by(),filter()但没有取得多大成功......这些都不起作用:

q = Comment.query.filter(path[1] == 11)
> NameError: name 'path' is not defined

q = Comment.query.filter_by(path[1] = 11)
> SyntaxError: keyword can't be an expression
Run Code Online (Sandbox Code Playgroud)

我不想为这个查询编写自定义SQL,但如果这是唯一的方法,那么请给出一些关于如何最佳构造的指示.

编辑1

确认我正在使用SQLAlchemy 0.7 - 所以使用此版本工作(周围)的答案会更有帮助.

我意识到,对于上面的评论实现,没有必要在确切的位置找到id号,在任何位置找到它们也可以工作.所以关于如何创建SQLAlchemy来生成这样的东西的任何输入都会很好:

SELECT id, path FROM comments WHERE …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy

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

允许在 Django Rest Framework 序列化器字段名称中使用连字符

鉴于我正在编写代码的 OpenAPI 规范要求在请求正文中使用连字符大小写(又名 kebab-case)变量名称,在使用 Django Rest Framework 时应该如何处理?

例如,POST /thing创建事物的请求具有以下主体:

{
    "owner-type": "platform"
}
Run Code Online (Sandbox Code Playgroud)

但是在Python,owner-type不是有效的变量名(“语法错误:无法分配给经营者”),这样反而Thingowner_type在模型中定义:

{
    "owner-type": "platform"
}
Run Code Online (Sandbox Code Playgroud)

但现在ThingSerializer有问题,因为再次owner-type是一个非法名称。这是不允许的:

class Thing(models.Model):
    owner_type = models.CharField(max_length=8)
Run Code Online (Sandbox Code Playgroud)

我试图ModelSerializer通过尝试调整由 生成的字段名称来覆盖名称的生成方式get_fields(),但它失败了。这是我的序列化程序:

    owner-type = serializers.CharField(...)
Run Code Online (Sandbox Code Playgroud)

和错误:

../venv/lib/python3.6/site-packages/rest_framework/fields.py:453: in get_attribute
    return get_attribute(instance, self.source_attrs)
../venv/lib/python3.6/site-packages/rest_framework/fields.py:101: in get_attribute
    instance = getattr(instance, attr)
E   AttributeError: 'Thing' object has no attribute 'owner-type'
Run Code Online (Sandbox Code Playgroud)

所以我的问题 - 如何配置 DRF 模型序列化器以允许包含下划线的模型字段被序列化/反序列化,以便 API 客户端看到连字符而不是下划线?这将是上面示例的通用解决方案,其中Thing.owner_type应该通过"owner-type"在 JSON …

python django django-rest-framework

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

django条件网址verify_exists

我的模型中定义了3个url字段,如下所示:

image_1 = models.URLField(max_length=100, verify_exists=True, blank=True)
image_2 = models.URLField(max_length=100, verify_exists=True, blank=True)
image_3 = models.URLField(max_length=100, verify_exists=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法可以测试是否verify_exists返回True或者False如果是这样取决于输出?

python django django-models

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

如何确保 Pyramid 的 route_url 和 route_path 生成的 URL 有效?

在 Pyramid 中使用 URL Dispatch 并在路由定义中使用模式匹配,我想确保生成的 URLroute_path是有效的并匹配给定的路由 - 最好的方法是什么?

这是我的路线定义 - 我想要/numbers后跟一个等于 1 或更大的数字字符串......

config.add_route('numbers', 'numbers/{n:[1-9]\d*}/')
Run Code Online (Sandbox Code Playgroud)

然后当我在视图中生成一条路线时,这很好:

request.route_url('numbers', n=123)
Run Code Online (Sandbox Code Playgroud)

它返回/numbers/123/,这很好......

但是,如果我这样做...

request.route_url('numbers', n='chicken')
Run Code Online (Sandbox Code Playgroud)

Pyramid 返回/numbers/chicken/显然与模式不匹配并且在传递回应用程序时会给出 404。

有没有办法可以强制 Pyramid 在n生成路线时检查是否与给定模式匹配?这意味着我可以确定route_url并且route_path会提供可以在应用程序中使用的有效 URL。

python routes pyramid

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