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 要不然你會一直的報錯😁😁😁