diff --git a/DjangoBlog/blog_signals.py b/DjangoBlog/blog_signals.py index 7133a83..e4de51c 100644 --- a/DjangoBlog/blog_signals.py +++ b/DjangoBlog/blog_signals.py @@ -22,7 +22,7 @@ from django.core.mail import EmailMultiAlternatives from django.db.models.signals import post_save from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed -from DjangoBlog.utils import cache, send_email, expire_view_cache, get_blog_setting +from DjangoBlog.utils import cache, send_email, expire_view_cache, get_blog_setting, delete_view_cache from DjangoBlog.spider_notify import SpiderNotify from oauth.models import OAuthUser from blog.models import Article, Category, Tag, Links, SideBar, BlogSettings @@ -65,12 +65,16 @@ def send_email_signal_handler(sender, **kwargs): def oauth_user_login_signal_handler(sender, **kwargs): id = kwargs['id'] oauthuser = OAuthUser.objects.get(id=id) - setting = get_blog_setting() - if oauthuser.picture and not oauthuser.picture.startswith(setting.resource_path): + site = Site.objects.get_current().domain + if oauthuser.picture and not oauthuser.picture.find(site) >= 0: from DjangoBlog.utils import save_user_avatar oauthuser.picture = save_user_avatar(oauthuser.picture) oauthuser.save() + delete_view_cache(oauthuser.author.username) + + cache.clear() + @receiver(post_save) def model_post_save_callback(sender, instance, created, raw, using, update_fields, **kwargs): @@ -99,10 +103,7 @@ def model_post_save_callback(sender, instance, created, raw, using, update_field 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) + delete_view_cache(instance.author.username) _thread.start_new(send_comment_email, (instance,)) @@ -114,4 +115,5 @@ def model_post_save_callback(sender, instance, created, raw, using, update_field @receiver(user_logged_out) def user_auth_callback(sender, request, user, **kwargs): logger.info(user) + delete_view_cache(user.username) cache.clear() diff --git a/DjangoBlog/utils.py b/DjangoBlog/utils.py index 8b9167b..0a4fcf4 100644 --- a/DjangoBlog/utils.py +++ b/DjangoBlog/utils.py @@ -209,11 +209,19 @@ def get_blog_setting(): def save_user_avatar(url): + setting = get_blog_setting() + logger.info(url) + try: + imgname = url.split('/')[-1] + if imgname: + path = r'{basedir}/avatar/{img}'.format(basedir=setting.resource_path, img=imgname) + if os.path.exists(path): + os.remove(path) + except: + pass try: rsp = requests.get(url, timeout=2) if rsp.status_code == 200: - setting = get_blog_setting() - basepath = r'{basedir}/avatar/'.format(basedir=setting.resource_path) if not os.path.exists(basepath): os.makedirs(basepath) @@ -229,3 +237,10 @@ def save_user_avatar(url): except Exception as e: logger.error(e) return url + + +def delete_view_cache(username): + from django.core.cache.utils import make_template_fragment_key + key = make_template_fragment_key('sidebar', [username]) + logger.info('delete sidebar key:' + key) + cache.delete(key) diff --git a/accounts/tests.py b/accounts/tests.py index 1330bdf..29fe028 100644 --- a/accounts/tests.py +++ b/accounts/tests.py @@ -5,6 +5,7 @@ from django.contrib.sites.models import Site import datetime from accounts.models import BlogUser from django.urls import reverse +from DjangoBlog.utils import * # Create your tests here. @@ -58,6 +59,7 @@ class AccountTest(TestCase): user.is_superuser = True user.is_staff = True user.save() + delete_view_cache(user.username) category = Category() category.name = "categoryaaa" category.created_time = datetime.datetime.now() diff --git a/oauth/admin.py b/oauth/admin.py index ddeff0c..f778918 100644 --- a/oauth/admin.py +++ b/oauth/admin.py @@ -24,9 +24,6 @@ class OAuthUserAdmin(admin.ModelAdmin): def has_add_permission(self, request): return False - def has_delete_permission(self, request, obj=None): - return False - def link_to_usermodel(self, obj): if obj.author: info = (obj.author._meta.app_label, obj.author._meta.model_name) diff --git a/oauth/views.py b/oauth/views.py index c399255..6be50a3 100644 --- a/oauth/views.py +++ b/oauth/views.py @@ -58,7 +58,11 @@ def authorize(request): import datetime user.nikename = "djangoblog" + datetime.datetime.now().strftime('%y%m%d%I%M%S') try: - user = OAuthUser.objects.get(type=type, openid=user.openid) + temp = OAuthUser.objects.get(type=type, openid=user.openid) + temp.picture = user.picture + temp.matedata = user.matedata + temp.nikename = user.nikename + user = temp except ObjectDoesNotExist: pass # facebook的token过长 @@ -83,7 +87,6 @@ def authorize(request): oauth_user_login_signal.send(sender=authorize.__class__, id=user.id) login(request, author) - return HttpResponseRedirect(nexturl) if not email: user.save()