def post(self, request, *args, **kwargs): # 发送验证码的form send_sms_form = DynamicLoginForm(request.POST) re_dict = {} if send_sms_form.is_valid(): mobile = send_sms_form.cleaned_data["mobile"] code = generate_random(6) # 生成验证码 re_json = send_single_sms(code, mobile) # 发送验证码 if re_json["code"] == 0: # 如果发送成功 re_dict["status"] = "success" # 连接redis r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0, charset="utf-8", decode_responses=True) r.set(str(mobile), code) r.expire(str(mobile), 60 * 5) # 设置验证码5分钟过期 else: re_dict["msg"] = re_json["msg"] # 返回错误代码给re_dict else: for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse(re_dict) # 返回JsonResponse给Ajax
def post(self, request): send_sms_form = DynamicLoginForm(request.POST) res_dict = {} if send_sms_form.is_valid(): print('验证成功') mobile = send_sms_form.cleaned_data.get('mobile') # 随机生成数字验证码 code = random_str.generate_random(4, 0) response = send_message_code(yp_apikey, code, mobile) if response.get('code') == 0: res_dict['status'] = 'success' r = redis.Redis(host='localhost', port=6379, db=0, charset='utf8', decode_responses=True) r.set(str(mobile), code) # 设置验证码5分钟过期 r.expire(str(mobile), 60 * 5) else: res_dict['msg'] = response.get('msg') else: print('验证失败') for key, value in send_sms_form.errors.items(): res_dict[key] = value[0] return JsonResponse(res_dict)
def post(self, request, *args, **kwargs): login_form = DynamicLoginPostForm(request.POST) dynamic_login = True banners = Banner.objects.all()[:3] if login_form.is_valid(): # 没有注册账号依然可以登录 mobile = login_form.cleaned_data['mobile'] # code = login_form.cleaned_data['code'] existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] else: # 创建一个用户 user = UserProfile(username=mobile) password = generate_random(10, 2) user.set_password(password) user.mobile = mobile user.save() login(request, user) next = request.GET.get("next", "") if next: return HttpResponseRedirect(next) return HttpResponseRedirect(reverse("index")) else: d_form = DynamicLoginForm() return render(request, 'login.html', {"login_form": login_form, "d_form": d_form, "dynamic_login": dynamic_login, "banners":banners})
def post(self, request, *args, **kwargs): login_form = DynamicLoginPostForm(request.POST) dynamic_login = True if login_form.is_valid(): # 没有注册帐号依然可以登录 mobile = login_form.cleaned_data['mobile'] # code=login_form.cleaned_data['code'] existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] else: # 新建一个用户 user = UserProfile(username=mobile) password = generate_random(10, 2) user.set_password(password) user.mobile = mobile user.save() login(request, user) return HttpResponseRedirect(reverse('index')) else: d_form = DynamicLoginForm() return render( request, 'login.html', { 'login_form': login_form, 'd_form': d_form, 'dynamic_login': dynamic_login })
def post(self, request, *args, **kwargs): login_form = DynamicLoginPostForm(request.POST) dynamic_login = True if login_form.is_valid(): #没有注册账号依然可以登陆 mobile = login_form.cleaned_data["mobile"] # code = login_form.cleaned_data["code"] existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] else: #新建用户 user = UserProfile(username=mobile) password = generate_random(10, 2) user.set_password(password) user.mobile = mobile user.save() login(request, user) return HttpResponseRedirect(reverse("index")) else: d_form = DynamicLoginForm() return render( request, "login.html", { "login_form": login_form, "d_form": d_form, "dynamic_login": dynamic_login })
def post(self, request, *args, **kwargs): # 验证用户输入是否正确 login_form = DynamicLoginPostForm(request.POST) dynamic_login = True banners = Banner.objects.all()[:3] if login_form.is_valid(): mobile = login_form.cleaned_data["mobile"] # 查询用户是否存在 existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: # 存在——获取用户信息进行登录 user = existed_users[0] else: # 用户不存在,进行注册用户 user = UserProfile(username=mobile) # 随机生成密码 password = generate_random(10, 2) # 将随机密码进行加密 user.set_password(password) user.mobile = mobile user.save() # 进行登录并跳转至首页 login(request, user) return HttpResponseRedirect(reverse("index")) else: d_form = DynamicLoginForm return render(request, "login.html", {"login_form": login_form, 'd_form': d_form, "dynamic_login": dynamic_login, "banners": banners})
def post(self, request, *args, **kwargs): login_form = DynamicLoginPostForm(request.POST) dynamic_login = True banners = Banner.objects.all()[:3] if login_form.is_valid():#账号符合表单结构(forms中进行验证码匹配) #没有注册账号依然可以登录 email = login_form.cleaned_data["email"] existed_users = UserProfile.objects.filter(email=email)#寻找数据库中该邮箱用户 if existed_users:#如果账号存在 user = existed_users[0] else: #新建一个用户 user = UserProfile(username=email) password = generate_random(10, 2) user.set_password(password) user.email = email user.save() login(request, user)#登陆 next = request.GET.get("next", "") if next: return HttpResponseRedirect(next) return HttpResponseRedirect(reverse("index")) else: d_form = DynamicLoginForm() return render(request, "login.html", {"login_form": login_form, "d_form": d_form, "banners":banners, "dynamic_login":dynamic_login})
def post(self, request, *args, **kwargs): # 把传递过来的信息都交给DynamicLoginForm会校验,主要是校验captcha字段 send_sms_form = DynamicLoginForm(request.POST) re_dict = {} # 如果图片验证码正确(大概理了一下验证流程:ajax前端先验证手机号->验证图片码->发送手机验证码) if send_sms_form.is_valid(): # 连接云片网,发送动态手机验证码 mobile = send_sms_form.cleaned_data['mobile'] # 随机生成数字验证码 code = generate_random(4, 0) re_json = send_single_sms(yp_apikey, code, mobile) # 如果发送成功,返回success if re_json['code'] == 0: re_dict['status'] = 'success' r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, charset='utf-8', decode_responses=True) r.set(str(mobile), code) r.expire(str(mobile), 60 * 5) # 验证码300秒后过期 # 如果发送失败,把云片网返回的错误信息交给前端,注意:云片网也会对手机号码进行校验 else: re_dict['msg'] = re_json['msg'] # 如果图片验证码不正确 else: # 循环错误,把所有的错误都添加进re_dict for key, value in send_sms_form.errors.items(): # value是个列表,所以要用索引 re_dict[key] = value[0] # JsonResponse返回给浏览器的是Content-Type: application/json,这样浏览器会自动反序列化 return JsonResponse(re_dict)
def post(self, request, *args, **kwargs): login_form = DynamicLoginPostForm(request.POST) dynamic_login = True banners = Banner.objects.all()[:3] if login_form.is_valid(): mobile = login_form.cleaned_data['mobile'] existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] else: user = UserProfile(username=mobile) password = generate_random(10, 2) user.set_password(password) user.mobile = mobile user.save() login(request, user) next = request.GET.get('next', '') if next: return HttpResponseRedirect(next) return HttpResponseRedirect(reverse('index')) else: d_form = DynamicLoginForm() return render( request, 'login.html', { 'login_form': login_form, 'd_form': d_form, 'dynamic_login': dynamic_login, 'banners': banners })
def post(self, request, *args, **kwargs): send_sms_form = DynamicLoginForm(request.POST) re_dict = {} if send_sms_form.is_valid(): mobile = send_sms_form.cleaned_data['mobile'] # 随机生成数字验证码 code = generate_random(4, 0) re_json = send_single_sms(yp_apikey, code, mobile=mobile) if re_json['code'] == 0: re_dict['status'] == 'success' r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0, charset='utf8', decode_responses=True) r.set(mobile, code) r.expire(str(mobile), 60 * 5) #设置验证码5分钟过期 else: re_dict['msg'] = re_json['msg'] else: for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse(re_dict)
def post(self,request,*args,**kwargs): dynamic_login=True banners = Banner.objects.all()[:3] #验证手机号及手机验证码 login_form=DynamicLoginPostForm(request.POST) if login_form.is_valid(): #没有注册仍然可以使用 mobile=login_form.cleaned_data['mobile'] code=login_form.changed_data['code'] existed_user=UserProfile.objects.filter(mobile=mobile) if existed_user: user=existed_user[0] else: #新建用户 user=UserProfile(username=mobile) password = generate_random(10, 2) user.set_password(password) user.mobile=mobile user.save() login(request, user) next = request.GET.get("next", '') if next: return HttpResponseRedirect(next) return HttpResponseRedirect(reverse('index')) else: # 验证码错误 d_form=DynamicLoginForm() context = {'login_form': login_form,'dynamic_login':dynamic_login,'d_form':d_form, 'banners':banners} return render(request, 'login.html', context=context)
def post(self, request, *args, **kwargs): login_form = DynamicLoginPostForm(request.POST) dynamic_login = True if login_form.is_valid(): #没有注册账号依然可以登陆 mobile = login_form.cleaned_data["mobile"] code = login_form.cleaned_data["code"] existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] else: #新建一个用户 user = UserProfile(username=mobile) password = generate_random((10, 2)) #生成用户首次登陆的随机密码 user.set_password(password) #生成该密码的秘文 user.mobile = mobile user.save() login(request, user) #使该用户登陆 next = request.GET.get("next", "") if next: return HttpResponseRedirect(next) return HttpResponseRedirect(reverse("index")) #跳转到首页 else: d_form = DynamicLoginForm() return render(request, "login.html", {"login_form": login_form, "d_form": DynamicLoginForm, "dynamic_login": dynamic_login}) #传递到html文件中
def post(self, request, *args, **kwargs): # 验证图片验证码 send_sms_form = DynamicLoginForm(request.POST) # 保存前端是哪一个信息出错 re_dict={} if send_sms_form.is_valid(): # 获取手机号码 mobile = send_sms_form.cleaned_data["mobile"] # 随机生成数字验证码 code = generate_random(4, 0) # 发送验证码 re_json = send_single_sms(yp_apikey, code, mobile=mobile) # 判断是否发送成功 if re_json["code"] == 0: # 发送成功 re_dict["status"] == "success" # redis 数据库操作 r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0, charset="utf8", decode_responses=True) r.set(str(mobile), code) r.exists(str(mobile), 60*5) else: # 发送失败 re_dict["msg"] = re_json["msg"] else: # 查看前端出错信息并保存到 re_dict={} for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse(re_dict)
def post(self, request, *args, **kwargs): dynamic_login = True # 用于标识是否为动态登陆 login_form = DynamicLoginPostForm(request.POST) if login_form.is_valid(): # 没有账号依然可以登录 mobile = login_form.cleaned_data["mobile"] # 获取code进行redis认证,判断验证码是否一致.采用利用form进行验证redis,使得代码分离性更好-> form.py # 验证用户是否存在 existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] login(request, user) else: # 新建一个用户 user = UserProfile(username=mobile) password = generate_random(12) # 生成密码 user.set_password(password) user.mobile = mobile user.save() login(request, user) next = request.GET.get("next") if next: return redirect(next, request) # 需要通过reverse跳转到index return redirect(reverse('index'), request) else: # 为了使得验证码得以显示,所以需要获取有验证码的form传递进来,验证码的form在普通的验证码字段 d_form = DynamicLoginForm() return render( request, "login.html", { "login_form": login_form, "dynamic_login": dynamic_login, "d_form": d_form, })
def post(self, request): d_captcha_form = DynamicLoginForm() dynamic_active = False dynamic_login_form = DynamicLoginPostForm(request.POST) if dynamic_login_form.is_valid(): mobile = dynamic_login_form.cleaned_data.get('mobile') existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] else: #新建一个用户 user = UserProfile(username=mobile) password = generate_random(10, 2) user.set_password(password) #set_password函数给指定的参数加密 user.mobile = mobile user.save() login(request, user) return redirect(reverse('front:index')) else: dynamic_active = True # print(dynamic_login_form.errors.get_json_data()) # print(dynamic_login_form.errors) content = { 'dynamic_login_form': dynamic_login_form, 'dynamic_active': dynamic_active, 'd_captcha_form': d_captcha_form, 'dynamic_login_form_errors': dynamic_login_form.errors } return render(request, 'login.html', context=content)
def post(self, request, *args, **kwargs): login_form = DynamicLoginPostForm(request.POST) #设置一个变量、登录报错以后、让页面还停留在动态短信登陆页面 dynamic_login = True #如果短信验证码、验证成功 if login_form.is_valid(): # 没有账号可以登录 思路:先判断用户是否存在、如果存在 ...如果不存在先注册、给随机密码在登录、看以后代码 # 2、提取手机号 mobile = login_form.cleaned_data['mobile'] #提取手机号 existed_users = UserProfile.objects.filter(mobile=mobile) #如果手机号存在(用户存在) if existed_users: #把手机号给 login记录一下 user = existed_users[0] #如果手机号不存在 (用户不保存在) else: #添加用户 user = UserProfile(username=mobile) #添加用户名字 user.password = user #添加随机密码 # 3、生成随机数验证码、不怕爬虫去伪造 password = generate_random(10, 2) user.set_password(password) #保存新用户的手机号 user.mobile = mobile #保存密码 user.save() #保存用户的信息 login(request, user) #获取next next = request.GET.get('next', "") if next: # 直接跳转到http://127.0.0.1:8001/course/1/lesson/ 这个页面 return HttpResponseRedirect(next) # 跳转到主页 return HttpResponseRedirect(reverse("index")) else: #传递这个图片验证码的、表单是因为:如果短信验证码登录报错、重新实例化 验证码对象、传递到前端登陆页面、就不用刷新登陆页面 d_form = DynamicLoginForm() #如果短信验证码验证失败、会接受DynamicLoginPostForm 类的验证错误 return render( request, "login.html", { "login_form": login_form, "dynamic_login": dynamic_login, 'd_form': d_form })
def post(self, request, *args, **kwargs): send_sms_form = DynamicLoginForm(request.POST) re_dict = dict() if send_sms_form.is_valid(): mobile = send_sms_form.cleaned_data['mobile'] # 随机生成数字验证码 code = generate_random(4, 0) re_json = send_single_sms(code, mobile) if re_json['code'] == 0: re_dict['status'] = 'success' r_obj = redis_obj() r_obj.setex(str(mobile), 60 * 5, code) else: re_dict['msg'] = re_json['msg'] else: for key, error in send_sms_form.errors.items(): re_dict[key] = error[0] return JsonResponse(re_dict)
def post(self, request, *args, **kwargs): send_sms_form = DynamicLoginForm(request.POST)#遵循从froms表中的DynamicLoginForm返回数据的格式 re_dict = {} if send_sms_form.is_valid(): email = send_sms_form.cleaned_data["email"] #随机生成数字验证码 code = generate_random(6, 0)#6位数字 re_json = send_register_email(code,email=email,send_type='forget')#发送邮件 if re_json:#发送成功时 re_dict["status"] = "success" #设置status状态,便于js处理控件样式变化 r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0, charset="utf8", decode_responses=True)#连接redis(需要终端开启redis) r.set(str(email), code)#redis中建立键值对,储存邮箱验证码信息 r.expire(str(email), 60*30) #设置验证码30分钟过期 else: re_dict["msg"] = re_json #发送失败则返回错误信息 else: for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse(re_dict)#返回json至js处理
def post(self, request, *args, **kwargs): dynamic_login = True login_form = DynamicLoginPostForm(request.POST) # 校验手机号码(下面),和手机验证码(内嵌在DynamicLoginPostForm里面了) banners = Banner.objects.all()[:3] if login_form.is_valid(): # 去数据库查是否存在该用户 mobile = login_form.cleaned_data['mobile'] existed_user = UserProfile.objects.filter(mobile=mobile) # 如果用户存在,则直接登录 if existed_user: user = existed_user[0] # 如果用户不存在,则新建一个用户 else: # 默认用户名=手机号 user = UserProfile(username=mobile) # 使用明文密码不安全,所以先生存随机密码,再用AbstractUser自带的set_password来进行hash加密存储,防止被破解 password = generate_random(10, 2) user.set_password(password) # 别忘记存手机号 user.mobile = mobile # 最后对新建的对象进行保存,否则不会存进数据库 user.save() # 登录后,跳转首页 login(request, user) next = request.GET.get('next', '') if next: return HttpResponseRedirect(next) return HttpResponseRedirect(reverse('index')) # 手机号码或手机验证码,验证失败就跳回登录页面 # 需求,显示错误信息 else: # 生成d_form对象是为了当验证失败返回登录页面的时候,能够带上captcha字段 d_form = DynamicLoginForm() return render( request, 'login.html', { 'login_form': login_form, 'dynamic_login': dynamic_login, 'd_form': d_form, "banners": banners, })
def post(self,request,*args,**kwargs): #验证手机号及图片验证码 send_sms_form=DynamicLoginForm(request.POST) re_dict={} if send_sms_form.is_valid(): mobile=send_sms_form.cleaned_data['mobile'] #随机生成验证码 code=generate_random(4,0) #调用云片网接口发送短信,传递apikey,验证码,手机号 res_json=send_single_sms(yunpian_apikey,code,mobile=mobile) if res_json['code']==0:#发送成功,将该手机号的验证码存入redis re_dict['status']='success' r=redis.Redis(host=REDIS_HOST,port=REDIS_PORT,db=0,charset='utf8',decode_responses=True) r.set(str(mobile),code) r.expire(str(mobile),5*60)#五分钟过期 else:#发送失败 re_dict['msg']=res_json['msg'] else: for key,value in send_sms_form.errors.items(): re_dict[key]=value[0] return JsonResponse(re_dict)
def post(self, request, *args, **kwargs): # 实例化验证码表单 send_sms_form = DynamicLoginForm(request.POST) re_dict = {} if send_sms_form.is_valid(): #当验证通过、1、会自动完成用户的验证码验证 #2、提取手机号 ajax只是给send_sms地址发送了手机号、和验证码、133行验证了图形验证码并通过、137行提取了手机号、 mobile = send_sms_form.cleaned_data['mobile'] #3、随机数验证码 code = generate_random(4, 0) #发送短信验证码给137行传过来的手机号 re_json = send_single_sms(yp_apikey, code, mobile=mobile) #如果是200发送成功 if re_json['code'] == 0: #修改字典的值 re_dict["status"] = "success" r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0, charset='utf8', decode_responses=True) # 设置值 r.set(str(mobile), code) # 持久化 (设置验证码5分钟过期) r.expire(str(mobile), 300) else: #否则变成msg re_dict["msg"] = re_json["msg"] else: for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse(re_dict)
def post(self, request, *args, **kwargs): send_sms_form = DynamicLoginGetForm(request.POST) re_dict = {} if send_sms_form.is_valid(): mobile = send_sms_form.cleaned_data["mobile"] code = generate_random(4, 0) re_json = send_single_sms(yp_apikey, code, mobile=mobile) if re_json["code"] == 0: re_dict["status"] = "success" r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, db=0, charset="utf8", decode_responses=True) r.set(str(mobile), code) r.expire(str(mobile), 300) # 五分钟过期 else: re_dict["msg"] = re_json["msg"] else: for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse({re_dict})
def post(self, request): dynamic_login_flag = True login_form = DynamicLoginPostForm(request.POST) if login_form.is_valid(): mobile = login_form.cleaned_data.get('mobile') existed_users = UserProfile.objects.filter(mobile=mobile) if existed_users: user = existed_users[0] else: # 未查到注册信息 user = UserProfile(username=mobile) user.set_password(random_str.generate_random(10, 2)) user.mobile = mobile user.save() login(request, user) return HttpResponseRedirect(reverse('index')) else: d_form = DynamicLoginForm() return render( request, 'login.html', { 'login_form': login_form, 'dynamic_login_flag': dynamic_login_flag, 'd_form': d_form })
def post(self, request, *args, **kwargs): send_sms_form = DynamicLoginForm(request.POST) re_dict = {} # 如果前端图形验证码输入正确 if send_sms_form.is_valid(): # 验证码验证成功 mobile = send_sms_form.cleaned_data["mobile"] # 随机生成验证码 code = generate_random(4, 0) # 验证码接口返回信息 re_json = send_sms_single(mobile, TENCENT_Template_ID, [code, 5]) # 如果手机验证码发送成功 if re_json['result'] == 0: re_dict["status"] = "success" r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, charset="utf8", decode_responses=True) r.set(str(mobile), code) # 设置验证码五分钟过去 r.expire(str(mobile), 60 * 5) else: re_dict["msg"] = re_json["errmsg"] else: for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse(re_dict)
def post(self, request): send_sms_form = DynamicLoginForm(request.POST) re_dict = {} if send_sms_form.is_valid(): mobile = send_sms_form.cleaned_data.get('mobile') code = generate_random(4, 0) sms_json = send_single_sms(settings.YP_APIKEY, code, mobile) if sms_json['code'] == 0: r = redis.Redis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, decode_responses=True) r.set(str(mobile), code) #设置过期时间 r.expire(str(mobile), 60 * 5) re_dict['status'] = 'success' else: re_dict['msg'] = sms_json['msg'] else: print(send_sms_form.errors.get_json_data()) for key, value in send_sms_form.errors.items(): re_dict[key] = value[0] return JsonResponse(re_dict)
import requests import json from apps.utils.random_str import generate_random def send_single_sms(apikey, code, mobile): # 发送单条短信 url = "https://sms.yunpian.com/v2/sms/single_send.json" text = "【范向辉】您的验证码是{}。如非本人操作,请忽略本短信".format(code) res = requests.post(url, data={ "apikey": apikey, "mobile": mobile, "text": text }) res_json = json.loads(res.text) return res_json if __name__ == "__main__": res = send_single_sms("6df689094eeec75e8e39452d37ec3622", generate_random(6, 1), "18438006462") import json res_json = json.loads(res.text) code = res_json["code"] msg = res_json["msg"] if code == 0: print("发送成功") else: print("发送失败: {}".format(msg))