1212from django .views .generic import FormView , RedirectView
1313from oauth .forms import RequireEmailForm
1414from django .urls import reverse
15+ from django .db import transaction
1516from DjangoBlog .utils import send_email , get_md5 , save_user_avatar
1617from DjangoBlog .utils import get_current_site
1718from django .core .exceptions import ObjectDoesNotExist
@@ -86,25 +87,26 @@ def authorize(request):
8687 if type == 'facebook' :
8788 user .token = ''
8889 if user .email :
89- author = None
90- try :
91- author = get_user_model ().objects .get (id = user .author_id )
92- except ObjectDoesNotExist :
93- pass
94- if not author :
95- result = get_user_model ().objects .get_or_create (email = user .email )
96- author = result [0 ]
97- if result [1 ]:
98- author .username = user .nikename
99- author .source = 'authorize'
100- author .save ()
101-
102- user .author = author
103- user .save ()
104-
105- oauth_user_login_signal .send (sender = authorize .__class__ , id = user .id )
106- login (request , author )
107- return HttpResponseRedirect (nexturl )
90+ with transaction .atomic ():
91+ author = None
92+ try :
93+ author = get_user_model ().objects .get (id = user .author_id )
94+ except ObjectDoesNotExist :
95+ pass
96+ if not author :
97+ result = get_user_model ().objects .get_or_create (email = user .email )
98+ author = result [0 ]
99+ if result [1 ]:
100+ author .username = user .nikename
101+ author .source = 'authorize'
102+ author .save ()
103+
104+ user .author = author
105+ user .save ()
106+
107+ oauth_user_login_signal .send (sender = authorize .__class__ , id = user .id )
108+ login (request , author )
109+ return HttpResponseRedirect (nexturl )
108110 else :
109111 user .save ()
110112 url = reverse ('oauth:require_email' , kwargs = {
@@ -122,18 +124,19 @@ def emailconfirm(request, id, sign):
122124 if not get_md5 (settings .SECRET_KEY + str (id ) + settings .SECRET_KEY ).upper () == sign .upper ():
123125 return HttpResponseForbidden ()
124126 oauthuser = get_object_or_404 (OAuthUser , pk = id )
125- if oauthuser .author :
126- author = get_user_model ().objects .get (pk = oauthuser .author_id )
127- else :
128- result = get_user_model ().objects .get_or_create (email = oauthuser .email )
129- author = result [0 ]
130- if result [1 ]:
131- author .source = 'emailconfirm'
132- author .username = oauthuser .nikename .strip () if oauthuser .nikename .strip () else "djangoblog" + datetime .datetime .now ().strftime (
133- '%y%m%d%I%M%S' )
134- author .save ()
135- oauthuser .author = author
136- oauthuser .save ()
127+ with transaction .atomic ():
128+ if oauthuser .author :
129+ author = get_user_model ().objects .get (pk = oauthuser .author_id )
130+ else :
131+ result = get_user_model ().objects .get_or_create (email = oauthuser .email )
132+ author = result [0 ]
133+ if result [1 ]:
134+ author .source = 'emailconfirm'
135+ author .username = oauthuser .nikename .strip () if oauthuser .nikename .strip () else "djangoblog" + datetime .datetime .now ().strftime (
136+ '%y%m%d%I%M%S' )
137+ author .save ()
138+ oauthuser .author = author
139+ oauthuser .save ()
137140 oauth_user_login_signal .send (sender = emailconfirm .__class__ , id = oauthuser .id )
138141 login (request , author )
139142
0 commit comments