1
1
import typing
2
2
3
- from django .contrib .sites .shortcuts import get_current_site
4
- from django .core .mail import send_mail
5
3
from django .db .models import Model
6
- from django .template .loader import render_to_string
7
- from django .urls import reverse
8
- from django .utils .encoding import force_bytes
9
- from django .utils .http import urlsafe_base64_encode
10
4
from rest_framework import serializers
11
5
12
- from reddit import settings
13
-
14
6
from .models import User
15
- from .tokens import account_activation_token
7
+ from .utils import user_creation
16
8
17
9
18
10
class UserSerializer (serializers .ModelSerializer ):
@@ -34,27 +26,8 @@ def create(self: "UserSerializer", validated_data: dict) -> User:
34
26
user = User .objects .create (nickname = validated_data ["nickname" ], email = validated_data ["email" ], is_active = False )
35
27
user .set_password (validated_data ["password" ])
36
28
user .save ()
37
- uid = urlsafe_base64_encode (force_bytes (user .pk ))
38
- token = account_activation_token .make_token (user )
39
29
request = self .context .get ("request" )
40
- protocol = "https" if request .is_secure () else "http"
41
- current_site = get_current_site (request )
42
- activation_link = reverse ("activate-account" , kwargs = {"uidb64" : uid , "token" : token })
43
- full_activation_link = f"{ protocol } ://{ current_site .domain } { activation_link } "
44
- send_mail (
45
- "Confirm your registration" ,
46
- f"Please click on the following link to confirm your registration " f"{ activation_link } " ,
47
- settings .EMAIL_HOST_USER ,
48
- [user .email ],
49
- fail_silently = False ,
50
- html_message = render_to_string (
51
- "users/account_activation_email.html" ,
52
- {
53
- "user" : user ,
54
- "activation_link" : full_activation_link ,
55
- },
56
- ),
57
- )
30
+ user_creation (user , request )
58
31
return user
59
32
60
33
def get_message (self : "UserSerializer" , obj : User ) -> str :
0 commit comments