小编Sir*_*ion的帖子

在Django中使用classmethod设置字段的默认值

我在网上发现了许多关于这个主题的类似帖子,但没有人明确说明哪个是问题.

class Item(models.Model):
    @classmethod
    def get_next_item_number(cls):
        return cls.objects.count() + 1

    number = models.IntegerField(default=get_next_item_number)
Run Code Online (Sandbox Code Playgroud)

问题

当我访问Django管理面板时,与'number'字段相关的文本字段包含

<classmethod object at 0x7fab049d7c50>
Run Code Online (Sandbox Code Playgroud)

所以我试着改变上面的代码

class Item(models.Model):
    @classmethod
    def get_next_item_number(cls):
        return cls.objects.count() + 1

    number = models.IntegerField(default=get_next_item_number())
Run Code Online (Sandbox Code Playgroud)

但是当我运行django服务器时,我得到:

number = models.IntegerField(default=get_next_item_number())
TypeError: 'classmethod' object is not callable
Run Code Online (Sandbox Code Playgroud)

我知道所有这一切都可以通过将get_next_item_number()声明为外部函数来防止,但这个解决方案对我来说并不优雅,因为get_next_item_number()仅指Item类.

我缺少一个解决方案吗?

python django django-models django-admin

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

通过 django web 应用程序将用户文件上传到 google 驱动器

我想使用 Google Drive 作为我的 Django 项目的存储(特别是我需要存储用户拍摄的图像)。我想要实现的目标如下:

  • 用户使用表单上传图像。这些文件必须以某种方式通过 Django 进行路由,Django 使用 Google Drive API 将它们重定向到 Google Drive。我不直接从用户浏览器发送文件到 Google Drive 的原因是我应该在客户端存储访问 Google Drive API 的密钥(当然,最终用户不能直接访问它)。

  • 上传后,我必须能够在我的网站上的图库中显示图像。

到目前为止,我已经阅读了 Google Drive API 文档,特别是,我已经成功使用 OAuth2 用于服务器到服务器应用程序完成了快速入门,请参阅此处(快速入门涵盖了将文件上传到用户的 Google Drive 文件夹的情况,因此有是我不需要的用户身份验证的中间步骤;相反,我使用服务帐户来授权我的 api 请求)。

附带问题:

  • 有没有办法以可浏览的方式访问用户通过 API 上传到 Google Drive 的文件列表,或者 API 是他们的唯一接口?我可以使用类似于我自己的 Google 云端硬盘帐户的 UI 来访问它们吗?

  • 另外,我是 Google 服务的新手,开发者控制台对我来说似乎很混乱...我不明白我可以使用多少磁盘空间以及该存储空间如何/是否与我自己的 Google Drive 帐户相关。

django http-upload google-drive-api

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

当缩进级别很重要时如何在 jinja 和 nunjucks 中编写漂亮的模板

我向 Jinja2 和 Nunjucks 用户发布了这个问题,因为后者很大程度上受到前者的启发,并且它们的模板语法基本相同。

当缩进和空格很重要时(例如,在生成降价文件时),我在寻找编写模板文件的最佳方法时遇到了一些麻烦。

假设以下上下文传递给我的模板

{
  functions = [
    {
      name: "myFunc",
      description: "This is a jsDoc description for a function",
      params: [
        {name: "label", type: "string"},
        {name: "size", type: "number"},
      ]
      returns: "void",        // <- optional, may not be present
      since: "API level 2.0"  // <- optional, may not be present
      deprecated: true        // <- optional, may not be present
    },
    ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想获得这个输出(使用这个精确的缩进级别):

    /**
     * This is a jsDoc description for a function
     *
     * …
Run Code Online (Sandbox Code Playgroud)

templates jinja2 nunjucks

5
推荐指数
0
解决办法
123
查看次数

PostgreSQL 索引和复制技术

背景:到目前为止,我一直使用 Django 及其 ORM 来构建小型网站,因此哪个数据库(MySQL 与 PostgreSQL)在幕后完成所有工作并不是真正的问题。

最近我决定更多地了解这两者之间的差异。我刚刚读完这篇(长篇)文章,它探讨了索引在 PostgresSQL 中的工作原理,我对以下事实感到非常震惊:

“例如,如果我们有一个定义了十几个索引的表,那么对仅由单个索引覆盖的字段的更新必须传播到所有 12 个索引中,以反映新行的 ctid。”

我根本不是专家,但对我来说听起来很疯狂,在更新不涉及索引的字段时,这种超载应该是设计使然的。

此外,文章继续解释 PostgreSQL 复制策略如何不在逻辑级别工作,而是在磁盘级别工作,即主服务器向从服务器发送所有更改的列表(逐字节)以应用于磁盘而不是更多抽象指令,例如UPDATE <fields> ON <table> WHERE ....

虽然网上很多比较 MySQL 和 PostgreSQL 的短文一般都倾向于声称 PostgreSQL 在技术上更先进(ACID、JSON 支持等),但这两个问题对我来说似乎是严重的缺点。您能否确认这些陈述并可能指出有关这些问题的更多资源?

谢谢你。

postgresql indexing database-replication

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

Openshift + django:503服务不可用+项目根目录

我正在尝试设置openshift来发布我的django项目.我创建了一个可扩展的python3.3应用程序,预装了django,我添加了postgres9.2盒式磁带.

我发现dirs结构相当复杂但最后我注意到默认的示例项目位于apps-root/runtime/repo/wsgi/openshift /下,所以我将所有文件从这个目录移动到名为'backup'的文件夹中贴在我的项目上.

现在,当我访问我的网站时,我得到:

503 Service Unavailable
No server is available to handle this request.
Run Code Online (Sandbox Code Playgroud)

我读到这可能是由于HAproxy.我试图通过Openshift在线Web界面重启我的应用程序,但我仍然得到相同的错误.

所以:

1)我该如何解决这个问题?

2)如何将我的项目的根文件夹从apps-root/runtime/repo/wsgi/openshift /更改为我的git repo的根目录,这样我就没有不需要的文件夹(即/ wsgi/openshift /)我的本地和bitbucket回购?

更新:查看我得到的日志:

==> python/logs/appserver.log <==
    server = server_class((host, port), handler_class)
File "/opt/rh/python33/root/usr/lib64/python3.3/socketserver.py", line 430, in __init__
    self.server_bind()
File "/opt/rh/python33/root/usr/lib64/python3.3/wsgiref/simple_server.py", line 50, in server_bind
    HTTPServer.server_bind(self)
File "/opt/rh/python33/root/usr/lib64/python3.3/http/server.py", line 135, in server_bind
    socketserver.TCPServer.server_bind(self)
File "/opt/rh/python33/root/usr/lib64/python3.3/socketserver.py", line 441, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
Run Code Online (Sandbox Code Playgroud)

如果我在Express表中访问HAProxy状态页面,则"服务器状态"在"local-gear"和"backend"行中都是DOWN.

django openshift

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