小编The*_*ing的帖子

PostgreSQL的时间戳差异小时数

是否有TIMESTAMPDIFF()PostgreSQL 的等价物?

我知道我可以减去两个时间戳来获得postgresql INTERVAL.我只想要INT中表示的两个时间戳之间的差异.

我可以在MySQL中这样做:

TIMESTAMPDIFF(HOUR, links.created, NOW())
Run Code Online (Sandbox Code Playgroud)

我只需要以小时表示的两个时间戳之间的差异表示为整数.

解决方案对我有用:

SELECT "links_link"."created",
"links_link"."title",
(EXTRACT(EPOCH FROM current_timestamp - "links_link"."created")/3600)::Integer AS "age" 
FROM "links_link"
Run Code Online (Sandbox Code Playgroud)

sql postgresql timestamp

54
推荐指数
5
解决办法
9万
查看次数

Django:在自定义URL后面提供媒体服务

所以我当然知道通过Django提供静态文件将直接送你到地狱但我很困惑如何使用自定义网址使用Django掩盖文件的真实位置. Django:在通用视图中提供下载,但我接受的答案似乎是"错误的"做事方式.

urls.py:

url(r'^song/(?P<song_id>\d+)/download/$', song_download, name='song_download'),
Run Code Online (Sandbox Code Playgroud)

views.py:

def song_download(request, song_id):
    song = Song.objects.get(id=song_id)
    fsock = open(os.path.join(song.path, song.filename))

    response = HttpResponse(fsock, mimetype='audio/mpeg')
    response['Content-Disposition'] = "attachment; filename=%s - %s.mp3" % (song.artist, song.title)

    return response
Run Code Online (Sandbox Code Playgroud)

事实证明,这种解决方案非常完美,但并不完美.如何在仍然通过nginx/apache服务的同时避免直接链接到mp3?

编辑1 - 附加信息

目前我可以使用如下地址获取我的文件: http://www.example.com/music/song/1692/download/ 但上面提到的方法是魔鬼的工作.

如何让nginx/apache服务于媒体,我怎样才能完成上面的工作?这是应该在网络服务器级别完成的吗?有些疯狂的mod_rewrite?

http://static.example.com/music/Aphex%20Twin%20-%20Richard%20D.%20James%20(V0)/10%20Logon-Rock%20Witch.mp3

编辑2 - 额外的附加信息

我使用nginx作为我的前端和反向代理返回apache /开发服务器所以我认为如果它确实需要某种mod_rewrite工作,我将不得不找到一些适用于nginx的东西.

python django nginx url-rewriting

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

Django模板切片 - 逆转顺序

感谢我从另一个问题中得到的非常有用的提示,我可以通过在模板中切片来限制列表中的值的数量:

{% for comment in thread.comment_set.all|slice:":3" %}
Run Code Online (Sandbox Code Playgroud)

现在我想得到我的评论的最后3个结果,所以我想一个简单的":-3"或"-3"就可以了,唉:

Caught an exception while rendering: Negative indexing is not supported.
Run Code Online (Sandbox Code Playgroud)

还使用:

{% for comment in thread.comment_set.all|slice:":3" reversed %}
Run Code Online (Sandbox Code Playgroud)

不行,因为如果我有5条评论,而不是1,2,3则显示3,2,1顺序中的前三条.

有什么方法可以显示帖子的最后3条评论而无需进入我的数据库吗?我希望能够纯粹使用模板系统来做到这一点.

{% for comment in thread.comment_set.all|dictsortreversed:"created"|slice:"3" %}
Run Code Online (Sandbox Code Playgroud)

由于我的表具有创建的时间戳,显示最后三个.

python django django-templates

10
推荐指数
2
解决办法
9476
查看次数

Django:在通用视图中提供下载

所以我想从一个文件夹中提供几个mp3 /home/username/music.我不认为这会是一个大问题,但我对如何使用通用视图和我自己的URL感到有点困惑.

urls.py

url(r'^song/(?P<song_id>\d+)/download/$', song_download, name='song_download'),
Run Code Online (Sandbox Code Playgroud)

我下面的例子在Django的单证的普通视图部分发现: http://docs.djangoproject.com/en/dev/topics/generic-views/(这是在底部一路)

我不是100%肯定如何根据我的需要量身定制.这是我的views.py

def song_download(request, song_id):
    song = Song.objects.get(id=song_id)

    response = object_detail(
        request,
        object_id = song_id,
        mimetype = "audio/mpeg",
    )
    response['Content-Disposition'= "attachment; filename=%s - %s.mp3" % (song.artist, song.title)

    return response
Run Code Online (Sandbox Code Playgroud)

我实际上不知道如何传达我希望它吐出我的mp3而不是它现在做的是输出.mp3与所有当前页面html包含.我的模板应该是我的mp3吗?我是否需要设置apache来提供文件,或者Django是否能够从文件系统中检索mp3(当然是适当的权限)并提供服务?如果确实需要配置Apache,我该如何告诉Django?

提前致谢.这些文件都在HD上,所以我不需要在现场"生成"任何东西,我想尽可能防止泄露这些文件的位置.一个简单/歌曲/ 1234 /下载将是太棒了.

python django file

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

Django中的复杂排序

所以我拉了一个链接列表,我试图按人气排序这些链接.我正在使用黑客新闻算法:

Y Combinator's Hacker News:
Popularity = (p - 1) / (t + 2)^1.5

Votes divided by age factor.
Where

p : votes (points) from users.
t : time since submission in hours.

p is subtracted by 1 to negate submitter's vote.
Age factor is (time since submission in hours plus two) to the power of 1.5.factor is (time since submission in hours plus two) to the power of 1.5.

我通过使用order by在MySQL和PHP Framework中完成了这个

(SUM(votes.karma_delta) - 1) / POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) …
Run Code Online (Sandbox Code Playgroud)

sql django postgresql

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

在Django中实现流行度算法

我正在创建一个类似于reddit和黑客新闻的网站,其中包含链接和投票数据库.我正在实施黑客新闻的流行算法,事情正在顺利进行,直到实际收集这些链接并显示它们.算法很简单:

Y Combinator's Hacker News:
Popularity = (p - 1) / (t + 2)^1.5`

Votes divided by age factor.
Where`

p : votes (points) from users.
t : time since submission in hours.

p is subtracted by 1 to negate submitter's vote.
Age factor is (time since submission in hours plus two) to the power of 1.5.factor is (time since submission in hours plus two) to the power of 1.5.

在Django中询问了一个非常类似的关于yonder Complex排序的问题,但是我没有考虑我的选择,而是选择了一个并试图让它工作,因为我是用PHP/MySQL做的,但我现在知道Django做的事情有很多不同.

我的模型看起来像这样(完全)

class Link(models.Model):
category = …
Run Code Online (Sandbox Code Playgroud)

python django algorithm postgresql

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

Django:来自两个模型的多个COUNT

我正在尝试创建一个个人资料页面,显示分配给每个相应职业的矮人数量.我有4个职业,每个职业中有2个工作,当然还有很多矮人,每个人都有一份工作.如何计算每个职业中矮人的数量?我的解决方案是在HTML中硬化职业名称并对每个职业进行查询,但这似乎是一个过多的查询.

这是我"想要"看到的内容:

Unassigned: 3
Construction: 2
Farming: 0
Gathering: 1
Run Code Online (Sandbox Code Playgroud)

这是我的模特.我通过不直接将职业连接到我的矮人模型(他们通过他们的工作连接)来增加一些复杂性.

from django.contrib.auth.models import User
from django.db import models

class Career(models.Model):
    name = models.CharField(max_length = 64)

    def __unicode__(self):
        return self.name

class Job(models.Model):
    career = models.ForeignKey(Career)
    name = models.CharField(max_length = 64)
    career_increment = models.DecimalField(max_digits = 4, decimal_places = 2)
    job_increment = models.DecimalField(max_digits = 4, decimal_places = 2)

    def __unicode__(self):
        return self.name

class Dwarf(models.Model):
    job = models.ForeignKey(Job)
    user = models.ForeignKey(User)
    created = models.DateTimeField(auto_now_add = True)
    modified = models.DateTimeField(auto_now = True)
    name = …
Run Code Online (Sandbox Code Playgroud)

sql django postgresql django-models

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

Python守护程序,用于查看文件夹和更新数据库

这专门用于管理MP3文件,但它很容易适用于任何包含大量文件的目录结构.

我想找到或编写一个守护进程(最好是在Python中),它将观看一个包含许多子文件夹的文件夹,这些子文件夹应该都包含X个MP3文件.无论何时添加,更新或删除文件,它都应该反映在数据库中(最好是PostgreSQL).我愿意接受如果简单地移动文件,删除相应的行并重新重新创建,但更新现有行会让我最开心.

Stack Overflow问题管理大量音乐有一点我想要的东西.

我基本上只想要一个数据库,然后我可以随心所欲地做任何事情.我现在最新的数据库是我的iTunes.xml文件,但我不想太依赖它,因为我并不总是想依靠iTunes进行音乐管理.我看到有很多项目可以做我想要的一些项目,但是这种格式要么我无法访问,要么比我想要的更复杂.如果有一些媒体播放器可以观看文件夹并更新一个易于访问的数据库,那么我就是为了它.

我倾向于编写自己的原因是因为我自己选择我的数据库和模式会很好.

python database filesystems daemon

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

Django:带有ASCII标头的Unicode文件名?

我有奇怪的编码文件的列表:02 - Charlie, Woody and You?Study #22.mp3我想是没有那么糟糕,但也有它的Django nginx的OR似乎是受阻于一些特定的字符.

>>> test = u'02 - Charlie, Woody and You?Study #22.mp3'
>>> test
u'02 - Charlie, Woody and You\uff0fStudy #22.mp3'
Run Code Online (Sandbox Code Playgroud)

我使用nginx作为反向代理连接到django内置的webserver(仍处于开发阶段)和postgresql for my database.我的数据库和表都是en_US.UTF-8,我使用pgadmin3来查看django之外的表.我的问题有点超出了我的标题,首先我应该如何在我的数据库中保存可能很糟糕的文件名?我目前的方法是

'path': smart_unicode(path.lstrip(MUSIC_PATH)),
'filename': smart_unicode(file)
Run Code Online (Sandbox Code Playgroud)

当我打印出他们确实展示的价值观时 u'whateverthecrap'

我不确定这是否应该如何做,但假设现在我有问题试图吐出下载.

我的下载视图看起来像这样:

def song_download(request, song_id):
    song = get_object_or_404(Song, pk=song_id)
    url = u'/static_music/%s/%s' % (song.path, song.filename)

    print url

    response = HttpResponse()
    response['X-Accel-Redirect'] = url
    response['Content-Type'] = 'audio/mpeg'
    response['Content-Disposition'] = "attachment; filename=test.mp3"

    return response
Run Code Online (Sandbox Code Playgroud)

与大多数文件下载,但是当我到达02 - Charlie, Woody and You?Study …

python django unicode ascii nginx

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

Python:在字符串列表中查找X到Y.

我有一个可能包含100个元素的列表,实际上是一个电子邮件,每行都是一个元素.该列表略有变化,因为其中包含\n的行被放在一个单独的元素中,所以我不能简单地使用固定值进行切片.我基本上需要一个变量的开始和停止短语(也需要部分搜索,因为我的一个开始短语可能实际上是Total Cost: $13.43我将使用的Total Cost:.)与结束短语相同.我也不希望在返回的列表中包含开始/停止短语.综上所述:

>>> email = ['apples','bananas','cats','dogs','elephants','fish','gee']
>>> start = 'ban'
>>> stop = 'ele'

# the magic here

>>> print new_email
['cats', 'dogs']
Run Code Online (Sandbox Code Playgroud)

笔记

  • 虽然不是完美的电子邮件格式,但它是相当一致的,所以开始/停止短语很可能不止一次出现.
  • 也没有空白元素.

只是为了好玩,感谢大家的帮助,这是我的最终代码:

def get_elements_positions(stringList=list(), startPhrase=None, stopPhrase=None):
    elementPositionStart, elementPositionStop = 0, -1
    if startPhrase:
        elementPositionStart = next((i for i, j in enumerate(stringList) if j.startswith(startPhrase)), 0)
    if stopPhrase:
        elementPositionStop = next((i for i, j in enumerate(stringList) if j.startswith(stopPhrase)), -1)
    if elementPositionStart + 1 == elementPositionStop - 1:
        return elementPositionStart + …
Run Code Online (Sandbox Code Playgroud)

python

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