我有一个我创建的应用程序获取我最新的github提交。除了为缓存信息而创建的模型之外,我在simple_tag中做了很多工作,但我不确定避免这样做的最佳方法。我将其作为标记的原因是我想将此数据显示为整个项目的主要布局的一部分,因此应该为每个调用的视图运行此代码,以扩展我的主要布局。
基本上,我的simple_tag应该提供最后的提交信息。它调用一个函数来检查db中的最后一个时间戳,如果它超过1小时,它使用urllib2命中github commit API来获取最后一次提交,然后将该数据存储在db中,然后打印新的提交信息。所以,它基本上看起来像这样,减去一些样板代码实际从github获取json等:
@register.simple_tag
def latest_commit(project_name):
commit = get_latest_commit(project_name)
return 'Latest commit message: %s' % commit.message
def get_latest_commit(project_name):
commit = models.Commit.objects.get(pk=project_name)
# ...
if not commit or now - commit.updated_at >= one_hour
# use urllib2 to get github json string
# ...
# use simple json to parse string
# ...
commit = Commit.objects.create(message=json['mesage'])
commit.save()
return commit
我觉得这个逻辑应该进入另一个地方......对我来说感觉有点脏,并且有可能存在XSS,但我是Django的新手,我不确定这样做的最好方法......
答案 0 :(得分:0)
我在simple_tag中做了很多工作,但我不确定避免这样做的最佳方法。
两个词:查看功能。
视图函数应提供最后的提交信息。风景 function应该调用一个检查db中最后一个时间戳的函数 如果它超过1小时,它使用urllib2来点击github提交 用于获取最后一次提交的API,然后将该数据存储在db和 然后......
将所有数据(包括新提交信息)提供给页面模板进行审核。
这就是视图功能应该做的事情。该模板呈现视图函数提供的信息。