django 实现同一个ip十分钟内只能注册一次(redis版本)
2024-10-14 06:34:39
上一篇文章,django 实现同一个ip十分钟内只能注册一次 的时候,我们在注册的时候选择使用的使我们的数据库来报错我们的注册的ip信息,可是如果数据量大,用户多的时候,单单靠我们的数据库
来储存我们的注册的ip地址信息。 而使用redis来存储的话,这样我们就少了一张表,少了数据库查询,你要是开发经验多了,就明白这里少用数据库查询的好处了,会减少很大的数据库压力。
那么我们现在来试着去构思我们的注册的内容,思路:
注册,用户post数据》取到ip去redis去判断,存在》十分钟内不能注册提示
注册,用户post数据》取到ip去redis去判断,不存在》注册,在redis中去存储这个ip信息过期时间为600s
接下来就是去实现我们的代码了。
import redis
r=redis.Redis(host='127.0.0.1',port=6379,db=0)
class RegView(View):
def get(self,request):
return render(request,'reg.html')
def post(self,request):
ipreques = request.META['REMOTE_ADDR']
ip_re = r.get(ipreques)
if ip_re:
return render(request, 'reg.html', {'msg': u'10分钟只能注册一次'})
username=request.POST['username']
if len(getuser(username))<=0:
return render(request,'reg.html',{'msg':u'用户名应该是6-16组成'})
passwor1 = request.POST['password']
passwor2 = request.POST['password1']
shouj = request.POST['shouji']
if len(getPhoneNumFromFile(shouj))<=0:
return render(request, 'reg.html', {'msg':u'手机号格式是否正确'})
shouji = User.objects.filter(mobile__exact=shouj)
if shouji:
return render(request, 'reg.html', {'msg': u'手机号已经存在'})
youjian = request.POST['email']
if len(getMailAddFromFile(youjian))<=0:
return render(request, 'reg.html', {'msg': u'邮箱格式是否正确'})
use=User.objects.filter(username__exact=username)
if use:
return render(request,'reg.html',{'msg':u'用户名已经存在'})
else:
if passwor1==passwor2:
use1=User()
use1.username=username
use1.password=make_password(passwor1)
use1.mobile=shouj
use1.email=youjian
use1.save()
r.set(ipreques,1,ex=600)
return HttpResponseRedirect('login')
else:
return render(request,'reg.html',{'msg':u'请查看密码是否一致'})
代码实现后,我们需要进行去验证, 首次注册成功,
我们来看看redis存没有
再次注册
这样我们的redis版本的登录注册已经实现完毕。
最新文章
- 通过top命令发现plymouthd进程cpu负载达到近100% 解决办法
- 《ASP.NET1200例》在DataList里编辑和删除数据
- HTML--表单,图片热点,网页划区和拼接
- C# 输出pdf文件流在页面上显示
- 在线重定义(Rdefine Table online)
- VMware 命令行下的网络配置
- Ajax乱码问题
- NodeJS下载文件实例
- Atom 编辑器试用
- Html5模拟通讯录人员排序(sen.js)
- Dev控件学习-GridControl中的BandGridview导出多层行头操作
- 位图索引(Bitmap Index)的故事
- 玩转Spring MVC(五)----在spring中整合log4j
- canvas 实现刮刮乐
- gradle修改apk包名和apk文件名
- STL next_permutation 算法原理和自行实现
- AppManager
- jquery的fadeTo方法的淡入淡出轮播图插件
- 20155217 2016-2017-2 《Java程序设计》第9周学习总结
- FileSystemWatcher 监视指定目录中的变更