首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为Django模型对象创建简短的tinyurl,同时保持代码整洁

为Django模型对象创建简短的tinyurl,同时保持代码整洁
EN

Stack Overflow用户
提问于 2011-06-03 16:53:47
回答 1查看 165关注 0票数 0

我使用这段代码https://github.com/kylebragger/tiny/blob/master/tiny.py将整数主键转换为缩短的URL。

例如,对于文章id 1000,可以将url转换为/articles/a1b2c3/title- of -article,而不是使用url /articles/1000/title-of-article。

这样做的问题是,我的模型和视图中到处都是对缩短和取消缩短这些主键的函数的调用。它们出现在使用主键的每个视图中,以及模型中返回固定链接的方法中,比如get_absolute_url()。

这似乎是不必要的重复。我想知道是否有一种更好的方法来实现这一点,而不用到处调用这些函数--可能是通过修改URL分派器及其反向函数,以便在生成或解析URL时遇到指定的URL参数时自动调用指定的回调函数,并让该回调执行转换。

EN

回答 1

Stack Overflow用户

发布于 2011-06-03 17:03:13

如果您将缩短的url作为排序的slug field存储在数据库中,那么您可以像使用任何其他slug字段一样使用它,并直接对其进行过滤,而不必对其进行转换。

或者:您可以考虑为使用此技术的任何模型编写一个自定义管理器,它允许您通过为表提供一个缩短的url来搜索表中的记录。就像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyModel.objects.get_by_short_url('myshorturl')

它可以实现为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyManager(models.Manager):
    ...
    def get_by_short_url(self, s):
        return self.get(from_tiny(s))

这与您现有的使用模型的get_absolute_url方法的想法相结合,意味着应该完全抽象出缩短算法。这使得它与使用任何实数字段来标识模型实例没有什么不同,比如主键本身或(最好)专用的slug字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6230174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文