Может быть
import codecs
zf = gzip.open(fname, 'rb')
reader = codecs.getreader("utf-8")
contents = reader( zf )
for line in contents:
pass
Я не уверен, что мне лучше всего ответить на мой вопрос, но после небольшой работы я собрал приложение, которое серьезно решает проблемы: django- hitcount .
Вы можете прочитать о том, как его использовать на странице документации .
Идеи для django-hitcount пришли из обоих моих двух исходных ответов ( Teebes -and- vikingosegundo ), что действительно заставило меня задуматься обо всем этом.
Это моя первая попытка поделиться подключаемым приложением с сообществом и надеюсь, что кто-то другой сочтет его полезным. Спасибо!
Вам следует используйте встроенный фреймворк сеанса django, он уже многое из этого делает за вас. Я реализовал это следующим образом с помощью приложения Q&A, в котором я хотел отслеживать просмотры:
in models.py:[1254ptingin views.py:
def record_view(request, question_id):
question = get_object_or_404(Question, pk=question_id)
if not QuestionView.objects.filter(
question=question,
session=request.session.session_key):
view = QuestionView(question=question,
ip=request.META['REMOTE_ADDR'],
created=datetime.datetime.now(),
session=request.session.session_key)
view.save()
return HttpResponse(u"%s" % QuestionView.objects.filter(question=question).count())
Vikingosegundo, вероятно, прав, хотя использование content-type, вероятно, более многоразовое решение, но определенно не изобретайте колесо с точки зрения сеансов отслеживания, Django уже делает это!
И последнее, у вас, вероятно, должно быть представление, записывающее попадание, которое вызывается либо через Ajax, либо через ссылку css, чтобы поиск двигатели не увеличивают ваши счета.
Надеюсь, это поможет!
Вы можете создать общую модель Hit
class Hit(models.Model):
date = models.DateTimeField(auto_now=True)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
в вашем view.py, вы напишите эту функцию:
def render_to_response_hit_count(request,template_path,keys,response):
for key in keys:
for i in response[key]:
Hit(content_object=i).save()
return render_to_response(template_path, response)
и представления, которые вас интересуют return
return render_to_response_hit_count(request, 'map/list.html',['list',],
{
'list': l,
})
Этот подход дает вам возможность не только для подсчета попаданий, но и для фильтрации истории попаданий по времени, типу содержимого и так далее ...
Поскольку таблица совпадений может быстро расти, вам следует подумать о стратегии удаления.