代码之家  ›  专栏  ›  技术社区  ›  meder omuraliev

在python中存储testbin/pastebin的文件

  •  0
  • meder omuraliev  · 技术社区  · 6 年前

    我基本上是在设置我自己的私人Pastebin,在那里我可以在我的私人服务器上保存HTML文件来测试和愚弄-有一些文本区域作为初始输入,保存文件,保存后,我想能够查看我保存的所有文件。

    我正试图用python编写它,只是想知道存储文件或代码的最实际的方法是什么?SQLite?笔直的平面文件?

    我担心的另一件事是文件的唯一性,显然我不希望文件名发生冲突(可能使用“标题”和时间戳保存?)-我应该如何构建它?

    3 回复  |  直到 15 年前
        1
  •  1
  •   thedz    15 年前

    我在django写了类似的东西来测试jquery片段。见:

    http://jquery.nodnod.net/

    我可以在Github上找到代码 http://github.com/dz/jquerytester/tree/master 如果你好奇的话。

    如果您使用的是纯Python,那么有两种方法可以实现命名:

    1. 如果存储为文件,则要求输入名称、salt和当前时间,并为文件名生成哈希。

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

    就个人而言,我会选择2。它很简单,确保了唯一性,并且允许您轻松地获取各种“文件”集。

        2
  •  1
  •   David Raznick    15 年前

    你考虑过试试吗 lodgeit . 这是一个免费的糕点,你可以自己招待。我不知道建立起来有多难。

    看看他们的代码,他们已经用数据库存储了(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)
        )
    

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

        3
  •  0
  •   Maxim Sloyko    15 年前

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

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

    您肯定需要以某种方式确保所有文件名都是唯一的,但是这个任务很简单,因为您只需检查磁盘上是否已经存在该文件,如果存在,则在其名称中添加一些数字,然后再次检查,依此类推。

    也不要将它们全部存储在一个目录中,因为如果一个目录中有很多(~100万)文件,文件系统的性能会更差,因此可以这样构造存储:

    file_dir/year/month/file id.html并将数据库中的“year/month/file id”部分存储为文件的唯一ID。

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