12
12
@file: blog_signals.py
13
13
@time: 2017/8/12 上午10:18
14
14
"""
15
-
15
+ import django
16
16
import django .dispatch
17
17
from django .dispatch import receiver
18
18
from django .conf import settings
19
- from DjangoBlog .utils import cache , send_email , expire_view_cache , get_blog_setting
20
- from DjangoBlog .spider_notify import SpiderNotify
19
+ from django .contrib .admin .models import LogEntry
21
20
from django .contrib .sites .models import Site
22
- from oauth .models import OAuthUser
23
21
from django .core .mail import EmailMultiAlternatives
22
+ from django .db .models .signals import post_save
23
+ from django .contrib .auth .signals import user_logged_in , user_logged_out , user_login_failed
24
24
25
+ from DjangoBlog .utils import cache , send_email , expire_view_cache , get_blog_setting
26
+ from DjangoBlog .spider_notify import SpiderNotify
27
+ from oauth .models import OAuthUser
28
+ from blog .models import Article , Category , Tag , Links , SideBar , BlogSettings
29
+ from comments .models import Comment
30
+ from comments .utils import send_comment_email
31
+ import _thread
25
32
import logging
26
33
27
34
logger = logging .getLogger (__name__ )
28
35
29
- comment_save_signal = django .dispatch .Signal (providing_args = ["comment_id" , "username" , "serverport" ])
30
- article_save_signal = django .dispatch .Signal (providing_args = ['id' , 'is_update_views' ])
31
- user_login_logout_signal = django .dispatch .Signal (providing_args = ['id' , 'type' ])
32
36
oauth_user_login_signal = django .dispatch .Signal (providing_args = ['id' ])
33
37
send_email_signal = django .dispatch .Signal (providing_args = ['emailto' , 'title' , 'content' ])
34
38
35
39
36
40
@receiver (send_email_signal )
37
- def send_email_callback (sender , ** kwargs ):
41
+ def send_email_signal_handler (sender , ** kwargs ):
38
42
emailto = kwargs ['emailto' ]
39
43
title = kwargs ['title' ]
40
44
content = kwargs ['content' ]
@@ -58,7 +62,7 @@ def send_email_callback(sender, **kwargs):
58
62
59
63
60
64
@receiver (oauth_user_login_signal )
61
- def oauth_user_login_callback (sender , ** kwargs ):
65
+ def oauth_user_login_signal_handler (sender , ** kwargs ):
62
66
id = kwargs ['id' ]
63
67
oauthuser = OAuthUser .objects .get (id = id )
64
68
setting = get_blog_setting ()
@@ -68,79 +72,46 @@ def oauth_user_login_callback(sender, **kwargs):
68
72
oauthuser .save ()
69
73
70
74
71
- @receiver (article_save_signal )
72
- def article_save_callback (sender , ** kwargs ):
73
- id = kwargs ['id' ]
74
- is_update_views = kwargs ['is_update_views' ]
75
- type = sender .__name__
76
- obj = None
77
- from blog .models import Article , Category , Tag
78
- if type == 'Article' :
79
- obj = Article .objects .get (id = id )
80
- elif type == 'Category' :
81
- obj = Category .objects .get (id = id )
82
- elif type == 'Tag' :
83
- obj = Tag .objects .get (id = id )
84
- if obj is not None :
75
+ @receiver (post_save )
76
+ def model_post_save_callback (sender , instance , created , raw , using , update_fields , ** kwargs ):
77
+ clearcache = False
78
+ if isinstance (instance , LogEntry ):
79
+ return
80
+ if 'get_full_url' in dir (instance ):
81
+ is_update_views = update_fields == {'views' }
85
82
if not settings .TESTING and not is_update_views :
86
83
try :
87
- notify_url = obj .get_full_url ()
84
+ notify_url = instance .get_full_url ()
88
85
SpiderNotify .baidu_notify ([notify_url ])
89
86
except Exception as ex :
90
87
logger .error ("notify sipder" , ex )
91
-
92
- from DjangoBlog .utils import cache
88
+ if not is_update_views :
89
+ clearcache = True
90
+ if isinstance (instance , Comment ):
91
+
92
+ path = instance .article .get_absolute_url ()
93
+ site = Site .objects .get_current ().domain
94
+ if site .find (':' ) > 0 :
95
+ site = site [0 :site .find (':' )]
96
+
97
+ expire_view_cache (path , servername = site , serverport = 80 , key_prefix = 'blogdetail' )
98
+ if cache .get ('seo_processor' ):
99
+ cache .delete ('seo_processor' )
100
+ comment_cache_key = 'article_comments_{id}' .format (id = instance .article .id )
101
+ cache .delete (comment_cache_key )
102
+ from django .core .cache .utils import make_template_fragment_key
103
+ key = make_template_fragment_key ('sidebar' , [instance .author .username ])
104
+ logger .info ('delete sidebar key:' + key )
105
+ cache .delete (key )
106
+
107
+ _thread .start_new (send_comment_email , (instance ,))
108
+
109
+ if clearcache :
110
+ cache .clear ()
111
+
112
+
113
+ @receiver (user_logged_in )
114
+ @receiver (user_logged_out )
115
+ def user_auth_callback (sender , request , user , ** kwargs ):
116
+ logger .info (user )
93
117
cache .clear ()
94
-
95
-
96
- @receiver (comment_save_signal )
97
- def comment_save_callback (sender , ** kwargs ):
98
- from comments .models import Comment
99
-
100
- serverport = kwargs ['serverport' ]
101
- username = kwargs ['username' ]
102
- comment = Comment .objects .get (id = kwargs ['comment_id' ])
103
- site = Site .objects .get_current ().domain
104
- article = comment .article
105
- # if not settings.DEBUG:
106
- if True :
107
- subject = '感谢您发表的评论'
108
- article_url = "https://{site}{path}" .format (site = site , path = comment .article .get_absolute_url ())
109
- html_content = """
110
- <p>非常感谢您在本站发表评论</p>
111
- 您可以访问
112
- <a href="%s" rel="bookmark">%s</a>
113
- 来查看您的评论,
114
- 再次感谢您!
115
- <br />
116
- 如果上面链接无法打开,请将此链接复制至浏览器。
117
- %s
118
- """ % (article_url , comment .article .title , article_url )
119
- tomail = comment .author .email
120
- send_email ([tomail ], subject , html_content )
121
-
122
- if comment .parent_comment :
123
- html_content = """
124
- 您在 <a href="%s" rel="bookmark">%s</a> 的评论 <br/> %s <br/> 收到回复啦.快去看看吧
125
- <br/>
126
- 如果上面链接无法打开,请将此链接复制至浏览器。
127
- %s
128
- """ % (article_url , article .title , comment .parent_comment .body , article_url )
129
- tomail = comment .parent_comment .author .email
130
- send_email ([tomail ], subject , html_content )
131
-
132
- path = article .get_absolute_url ()
133
- site = Site .objects .get_current ().domain
134
- if site .find (':' ) > 0 :
135
- site = site [0 :site .find (':' )]
136
-
137
- expire_view_cache (path , servername = site , serverport = serverport , key_prefix = 'blogdetail' )
138
- if cache .get ('seo_processor' ):
139
- cache .delete ('seo_processor' )
140
- comment_cache_key = 'article_comments_{id}' .format (id = article .id )
141
- cache .delete (comment_cache_key )
142
- from django .core .cache .utils import make_template_fragment_key
143
-
144
- key = make_template_fragment_key ('sidebar' , [username ])
145
- logger .info ('delete sidebar key:' + key )
146
- cache .delete (key )
0 commit comments