У меня есть приложение, которое я создал, которое получает мои последние коммиты с github.Кроме модели, которая была создана для кеширования информации, я делаю большую работу внутри simple_tag, но я не уверен, как лучше всего этого избежать.Причина, по которой я превратил это в тег, заключается в том, что я хочу отобразить эти данные как часть основного макета моего общего проекта, и поэтому этот код следует запускать для каждого вызываемого представления, расширяющего мой основной макет.
По сути, мой simple_tag должен предоставлять информацию о последнем коммите.Он вызывает функцию, которая проверяет последнюю метку времени в БД, и если ему более 1 часа, он использует urllib2, чтобы запустить API-интерфейс коммитов github, чтобы получить последний коммит, и в свою очередь сохранить эти данные в БД, а затем распечатать свежую информацию о коммите,Итак, в принципе это выглядит примерно так, за исключением некоторого стандартного кода для получения json от github, например:
@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 и не уверен, как лучше это сделать ...