在Python中存储testbin / pastebin的文件

时间:2009-07-26 09:23:29

标签: python web-applications

我基本上试图设置我自己的私有pastebin,我可以在我的私人服务器上保存html文件进行测试和傻瓜 - 为初始输入设置某种textarea,保存文件,保存之后我会喜欢能够查看我保存的所有文件。

我正在尝试在python中编写这个,只是想知道存储文件或代码最实用的方法是什么? SQLite的?平直的文件?

我担心的另一件事是文件的唯一性,显然我不想要冲突的文件名(可能使用'title'和timestamp保存?) - 我应该如何构建它?

3 个答案:

答案 0 :(得分:1)

我在Django中写了类似的东西来测试jQuery片段。参见:

http://jquery.nodnod.net/

如果您感到好奇,我可以在http://github.com/dz/jquerytester/tree/master的GitHub上找到该代码。

如果您使用的是直接Python,有几种方法可以进行命名:

  1. 如果存储为文件,请询问名称,当前时间的盐,并为文件名生成哈希值。

  2. 如果使用mysqlite或其他数据库,只需使用数字唯一ID。

  3. 就个人而言,我会选择#2。它很容易,确保唯一性,并允许您轻松获取各种“文件”。

答案 1 :(得分:1)

您是否考虑过尝试lodgeit。它是一个免费的pastbin,你可以自己托管。我不知道设置有多难。

查看他们的代码,他们已经使用了一个存储数据库(sqllite会这样做)。他们在那里构建了粘贴表,(这是sqlalchemy表声明样式)。代码只是一个文本字段。

pastes = Table('pastes', metadata,
        Column('paste_id', Integer, primary_key=True),
        Column('code', Text),
        Column('parent_id', Integer, ForeignKey('pastes.paste_id'),
               nullable=True),
        Column('pub_date', DateTime),
        Column('language', String(30)),
        Column('user_hash', String(40), nullable=True),
        Column('handled', Boolean, nullable=False),
        Column('private_id', String(40), unique=True, nullable=True)
    )

他们还制作了一个用于版本控制的层次结构(参见自联接)。

答案 2 :(得分:0)

普通文件肯定更有效。保存数据库以获得更复杂的查询。

如果您需要对文件进行某些格式化,例如正确突出显示代码,最好在之前使用该代码保存文件。这样,每次显示文件时都不需要应用格式。

你肯定需要以某种方式确保所有文件名都是唯一的,但是这个任务很简单,因为你可以检查,如果文件已经存在于磁盘上,如果它确实存在,请在其名称中添加一些数字并再次检查等等。

不要将它们全部存储在一个目录中,因为如果单个目录中有很多(大约100万个)文件,文件系统可能会执行得更糟,因此您可以像这样构建存储:

FILE_DIR / YEAR / MONTH / FileID.html并将“YEAR / MONTH / FileID”部分存储在数据库中作为文件的唯一ID。

当然,如果您不担心性能(例如,用户不多),您可以将所有内容存储在数据库中,这样更容易管理。