Django發送郵件,注冊時郵件獲取驗證碼


settings.py里面的配置

 1 # 郵件
 2 EMAIL_HOST = 'smtp.163.com'
 3 # 設置端口號,為數字
 4 EMAIL_PORT = 25
 5 #設置發件人郵箱
 6 EMAIL_HOST_USER = 'kongfuzi_k@163.com'
 7 # 設置發件人 授權碼
 8 EMAIL_HOST_PASSWORD = '123456789hhh'
 9 # 設置是否啟用安全鏈接
10 EMAIL_USER_TLS = True
11 # EMAIL_USER_TLS = False
12 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
13 
14 # redis 的配置文件
15 CACHES = {
16     "default": {
17         "BACKEND": "django_redis.cache.RedisCache",
18         "LOCATION": "redis://127.0.0.1:6379",
19         "OPTIONS": {
20             "CLIENT_CLASS": "django_redis.client.DefaultClient",
21             "CONNECTION_POOL_KWARGS": {"max_connections": 100}
22             # "PASSWORD": "密碼",
23         }
24     }
25 }

 

views.py里面的代碼 有存入redis 和 發送郵件

 1 from django.core.cache import cache  # 存入redis
 2 from rest_framework.views import APIView
 3 from rest_framework.response import Response
 4 from shiyanlou_dj import settings
 5 from random import randint
 6 import hashlib
 7 
 8 #生成隨機的驗證碼
 9 def Email_Code():
10     code_ = ''
11     code_str = 'abcdefghijklmnopqrstuvwxyz1234567890'
12     for k in range(5):
13         code_ += code_str[randint(0,35)]
14     return code_
15 
16 #   md5加鹽
17 def md5_md5(params):
18     md5 = hashlib.md5(params.encode(encoding='utf-8'))
19     return md5.hexdigest()
20 class RegisterView(APIView):
21     def post(self, request):
22         try:
23             email = request.data.get('email')  # 獲取前端郵箱
24             code = request.POST.get('verif') #獲取前段的驗證碼
25             # 驗證郵箱的格式
26             re_email = r'(\w+)@(\w+)\.(\w+)'
27             if not re.match(re_email, email):
28                 return Response({'code': 4001, 'msg': '郵箱格式不正確'})
29             #判斷是否輸入了驗證碼
30             if not code:
31                 return Response({'code':4003,'msg':'請輸入驗證碼'})
32             #獲取驗證碼,並判斷是否失效了
33             code_ = cache.get('syl_'+email)
34             if not code_:
35                 return Response({'code':4006,'msg':'驗證碼已失效'})
36             #判斷輸入的驗證碼,和獲取到的驗證碼是否一致
37             if code == code_:
38                 data = {
39                     'email':email,
40                     'password':password,
41                     'username':email,
42                     'img':'666'
43                 }
44                 #   序列化寫入數據
45                 userser = UserSerializer(data=data)
46                 if not userser.is_valid():
47                     return Response({'code':4005,'msg':'注冊失敗'})
48                 ret = {
49                     'code': 200,
50                     'msg': '注冊成功'
51                 }
52                 userser.save()   #提交
53                 return Response(ret)
54 
55             return Response({'code':4004,'msg':'驗證碼錯誤'})
56         #返回錯誤信息
57         except:
58             return Response({'code': 0, 'msg': '網絡有些問題,請等一下再試'})
59 
60 
61 # post請求
62 # 獲取到驗證碼,並存入redis
63 # 發生郵箱
64 class Email_code_APIView(APIView):
65     def post(self, request):
66         try:
67             # 從前端獲取驗證碼
68             email = request.POST.get('email')
69             # 生成隨機的驗證碼
70             code = Email_Code()
71             ret = '您的驗證碼是{}'.format(code)
72             # 給郵箱發送驗證碼
73             my_email = send_mail('激活驗證', ret, settings.DEFAULT_FROM_EMAIL, [email])
74             if not my_email == 1:
75                 return Response({
76                     'code': 0,
77                     'msg': "郵件發送失敗",
78                 })
79             key = 'syl_' + email
80             cache.set(key, code, 30)  # 5分鍾的有效時間
81             ret = {
82                 'code': 200,
83                 'msg': "郵件發送成功"
84             }
85             return Response(ret)
86         # 返回錯誤信息
87         except:
88             return Response({'code': 0, 'msg': '網絡有些問題,請等一下再試'})

 

 

 記得剛開始的時候打開redis 要不然你會一直的報錯😁😁😁

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM