def seo_processor(requests): key = 'seo_processor' value = cache.get(key) if value: logger.info('get processor cache.') return value else: logger.info('set processor cache.') setting = get_blog_setting() value = { 'SITE_NAME': setting.sitename, 'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, 'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, 'SITE_SEO_DESCRIPTION': setting.site_seo_description, 'SITE_DESCRIPTION': setting.site_description, 'SITE_KEYWORDS': setting.site_keywords, 'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/', 'ARTICLE_SUB_LENGTH': setting.article_sub_length, 'nav_category_list': Category.objects.all(), 'nav_pages': Article.objects.filter(type='p', status='p'), 'OPEN_SITE_COMMENT': setting.open_site_comment, 'BEIAN_CODE': setting.beiancode, 'ANALYTICS_CODE': setting.analyticscode, "BEIAN_CODE_GONGAN": setting.gongan_beiancode, "SHOW_GONGAN_CODE": setting.show_gongan_code } cache.set(key, value, 60 * 60 * 10) return value
def gravatar_url(email, size=40): """获得gravatar头像""" cachekey = 'gravatat/' + email if cache.get(cachekey): return cache.get(cachekey) else: usermodels = OAuthUser.objects.filter(email=email) if usermodels: o = list(filter(lambda x: x.picture is not None, usermodels)) if o: return o[0].picture email = email.encode('utf-8') default = "https://resource.lylinux.net/image/2017/03/26/120117.jpg".encode('utf-8') url = "https://www.gravatar.com/avatar/%s?%s" % ( hashlib.md5(email.lower()).hexdigest(), urllib.parse.urlencode({'d': default, 's': str(size)})) cache.set(cachekey, url, 60 * 60 * 10) return url
def gravatar_url(email, size=40): """Get gravatar avatar""" cachekey = 'gravatat/' + email if cache.get(cachekey): return cache.get(cachekey) else: usermodels = OAuthUser.objects.filter(email=email) if usermodels: o = list(filter(lambda x: x.picture is not None, usermodels)) if o: return o[0].picture email = email.encode('utf-8') default = "https://mtuktarov.ru/static/blog/img/avatar.png".encode('utf-8') url = "https://www.gravatar.com/avatar/%s?%s" % ( hashlib.md5(email.lower()).hexdigest(), urllib.parse.urlencode({'d': default, 's': str(size)})) cache.set(cachekey, url, 60 * 60 * 10) return url
def get_queryset_from_cache(self, cache_key): # raise NotImplementedError() value = cache.get(cache_key) if value: logger.info('get view cache.key:{key}'.format(key=cache_key)) return value else: article_list = self.get_queryset_data() cache.set(cache_key, article_list) logger.info('set view cache.key:{key}'.format(key=cache_key)) return article_list
def comment_list(self): cache_key = 'article_comments_{id}'.format(id=self.id) value = cache.get(cache_key) if value: logger.info('get article comments:{id}'.format(id=self.id)) return value else: comments = self.comment_set.filter(is_enable=True) cache.set(cache_key, comments) logger.info('set article comments:{id}'.format(id=self.id)) return comments
def comment_save_callback(sender, **kwargs): from comments.models import Comment serverport = kwargs['serverport'] username = kwargs['username'] comment = Comment.objects.get(id=kwargs['comment_id']) site = Site.objects.get_current().domain article = comment.article # if not settings.DEBUG: if True: subject = '感谢您发表的评论' article_url = "https://{site}{path}".format( site=site, path=comment.article.get_absolute_url()) html_content = """ <p>非常感谢您在本站发表评论</p> 您可以访问 <a href="%s" rel="bookmark">%s</a> 来查看您的评论, 再次感谢您! <br /> 如果上面链接无法打开,请将此链接复制至浏览器。 %s """ % (article_url, comment.article.title, article_url) tomail = comment.author.email send_email([tomail], subject, html_content) if comment.parent_comment: html_content = """ 您在 <a href="%s" rel="bookmark">%s</a> 的评论 <br/> %s <br/> 收到回复啦.快去看看吧 <br/> 如果上面链接无法打开,请将此链接复制至浏览器。 %s """ % (article_url, article.title, comment.parent_comment.body, article_url) tomail = comment.parent_comment.author.email send_email([tomail], subject, html_content) path = article.get_absolute_url() site = Site.objects.get_current().domain if site.find(':') > 0: site = site[0:site.find(':')] expire_view_cache(path, servername=site, serverport=serverport, key_prefix='blogdetail') if cache.get('seo_processor'): cache.delete('seo_processor') comment_cache_key = 'article_comments_{id}'.format(id=article.id) cache.delete(comment_cache_key) from django.core.cache.utils import make_template_fragment_key key = make_template_fragment_key('sidebar', [username]) cache.delete(key)
def comment_list(self): cache_key = 'article_comments_{id}'.format(id=self.id) value = cache.get(cache_key) if value: logger.info('get article comments:{id}'.format(id=self.id)) return value else: comments = self.comment_set.filter(is_enable=True) cache.set(cache_key, comments, 60 * 100) logger.info('set article comments:{id}'.format(id=self.id)) return comments
def comment_list(self): cache_key = 'article_comments_{id}'.format(id=self.id) value = cache.get(cache_key) if value: logger.info('get article comments:{id}'.format(id=self.id)) return value else: comments = self.comment_set.all() cache.set(cache_key, comments) logger.info('set article comments:{id}'.format(id=self.id)) return comments
def comment_save_callback(sender, **kwargs): from comments.models import Comment if settings.DEBUG: return serverport = kwargs['serverport'] username = kwargs['username'] comment = Comment.objects.get(id=kwargs['comment_id']) site = Site.objects.get_current().domain article = comment.article # if not settings.DEBUG: if True: subject = '感谢您发表的评论' article_url = "https://{site}{path}".format(site=site, path=comment.article.get_absolute_url()) html_content = """ <p>非常感谢您在本站发表评论</p> 您可以访问 <a href="%s" rel="bookmark">%s</a> 来查看您的评论, 再次感谢您! <br /> 如果上面链接无法打开,请将此链接复制至浏览器。 %s """ % (article_url, comment.article.title, article_url) tomail = comment.author.email send_email([tomail], subject, html_content) if comment.parent_comment: html_content = """ 您在 <a href="%s" rel="bookmark">%s</a> 的评论 <br/> %s <br/> 收到回复啦.快去看看吧 <br/> 如果上面链接无法打开,请将此链接复制至浏览器。 %s """ % (article_url, article.title, comment.parent_comment.body, article_url) tomail = comment.parent_comment.author.email send_email([tomail], subject, html_content) path = article.get_absolute_url() site = Site.objects.get_current().domain if site.find(':') > 0: site = site[0:site.find(':')] expire_view_cache(path, servername=site, serverport=serverport, key_prefix='blogdetail') if cache.get('seo_processor'): cache.delete('seo_processor') comment_cache_key = 'article_comments_{id}'.format(id=article.id) cache.delete(comment_cache_key) from django.core.cache.utils import make_template_fragment_key key = make_template_fragment_key('sidebar', [username]) cache.delete(key)
def form_valid(self, form): """提交的数据验证合法后的逻辑""" user = self.request.user article_id = self.kwargs['article_id'] article = Article.objects.get(pk=article_id) if not self.request.user.is_authenticated(): email = form.cleaned_data['email'] username = form.cleaned_data['name'] user = get_user_model().objects.get_or_create(username=username, email=email)[0] # auth.login(self.request, user) comment = form.save(False) comment.article = article comment.author = user if form.cleaned_data['parent_comment_id']: parent_comment = Comment.objects.get( pk=form.cleaned_data['parent_comment_id']) comment.parent_comment = parent_comment comment.save(True) from DjangoBlog.utils import expire_view_cache, cache from django.contrib.sites.models import Site path = article.get_absolute_url() site = Site.objects.get_current().domain if site.find(':') > 0: site = site[0:site.find(':')] port = 80 try: # django1.8 没有这个方法... port = self.request.get_port() except: pass expire_view_cache(path, servername=site, serverport=port, key_prefix='blogdetail') if cache.get('seo_processor'): cache.delete('seo_processor') comment_cache_key = 'article_comments_{id}'.format(id=article_id) cache.delete(comment_cache_key) from django.core.cache.utils import make_template_fragment_key username = self.request.user.username if self.request.user else '' key = make_template_fragment_key('sidebar', [username]) cache.delete(key) return HttpResponseRedirect("%s#div-comment-%d" % (article.get_absolute_url(), comment.pk))
def get_queryset_from_cache(self, cache_key): ''' Cache page data :param cache_key: key :return: ''' value = cache.get(cache_key) if value: logger.info('get view cache.key:{key}'.format(key=cache_key)) return value else: article_list = self.get_queryset_data() cache.set(cache_key, article_list) logger.info('set view cache.key:{key}'.format(key=cache_key)) return article_list
def get_queryset_from_cache(self, cache_key): ''' 缓存页面数据 :param cache_key: 缓存key :return: ''' value = cache.get(cache_key) if value: logger.info('获取 view 缓存的 key:{key}'.format(key=cache_key)) return value else: article_list = self.get_queryset_data() cache.set(cache_key, article_list) logger.info('设置 view 缓存的 key:{key}'.format(key=cache_key)) return article_list
def get_queryset_from_cache(self, cache_key): """ 缓存页面数据 :param cache_key: 缓存 key :return: """ value = cache.get(cache_key) # 如果存在缓存,则从缓存中获取数据 if value: logger.info('get view cache.key:{key}'.format(key=cache_key)) return value # 否则去数据库中获取数据,缓存后,返回给用户 else: article_list = self.get_queryset_data() cache.set(cache_key, article_list) logger.info('set view cache.key:{key}'.format(key=cache_key)) return article_list
def process_view(self, request, view_func, view_args, view_kwargs): """ 处理当前在线人数 """ http_user_agent = request.META.get('HTTP_USER_AGENT', []) if 'Spider' in http_user_agent or 'spider' in http_user_agent: return online_ips = cache.get("online_ips", []) if online_ips: online_ips = cache.get_many(online_ips).keys() online_ips = list(online_ips) ip = get_real_ip(request) cache.set(ip, 0, 5 * 60) if ip not in online_ips: online_ips.append(ip) s = type(online_ips) cache.set("online_ips", online_ips)
def model_post_save_callback(sender, instance, created, raw, using, update_fields, **kwargs): clearcache = False if isinstance(instance, LogEntry): return if 'get_full_url' in dir(instance): is_update_views = update_fields == {'views'} if not settings.TESTING and not is_update_views: try: notify_url = instance.get_full_url() SpiderNotify.baidu_notify([notify_url]) except Exception as ex: logger.error("notify sipder", ex) if not is_update_views: clearcache = True if isinstance(instance, Comment): path = instance.article.get_absolute_url() site = Site.objects.get_current().domain if site.find(':') > 0: site = site[0:site.find(':')] expire_view_cache(path, servername=site, serverport=80, key_prefix='blogdetail') if cache.get('seo_processor'): cache.delete('seo_processor') comment_cache_key = 'article_comments_{id}'.format( id=instance.article.id) cache.delete(comment_cache_key) from django.core.cache.utils import make_template_fragment_key key = make_template_fragment_key('sidebar', [instance.author.username]) logger.info('delete sidebar key:' + key) cache.delete(key) _thread.start_new(send_comment_email, (instance, )) if clearcache: cache.clear()
def seo_processor(requests): key = 'seo_processor' value = cache.get(key) if value: logger.info('get processor cache.') return value else: logger.info('set processor cache.') value = { 'SITE_NAME': settings.SITE_NAME, 'SHOW_GOOGLE_ADSENSE': settings.SHOW_GOOGLE_ADSENSE, 'SITE_SEO_DESCRIPTION': settings.SITE_SEO_DESCRIPTION, 'SITE_DESCRIPTION': settings.SITE_DESCRIPTION, 'SITE_KEYWORDS': settings.SITE_SEO_KEYWORDS, 'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/', 'ARTICLE_SUB_LENGTH': settings.ARTICLE_SUB_LENGTH, 'nav_category_list': Category.objects.all(), 'nav_pages': Article.objects.filter(type='p', status='p'), # 'MAX_COMMENTID': Comment.objects.latest().pk, # 'MAX_ARTICLEID': Article.objects.latest().pk } cache.set(key, value, 60 * 60 * 10) return value