django实现同一个ip十分钟内只能注册一次的实例


Posted in Python onNovember 03, 2017

很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦

逻辑:

取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注册,到登录界面,大于600可以注册,

设计一个数据库来存储这个ip地址和访问时间,

class Ip(models.Model):
 ip=models.CharField(max_length=20)
 time=models.DateTimeField()
 class Meta:
  verbose_name = u'访问时间'
  verbose_name_plural = verbose_name
 def __str__(self):
  return self.ip

然后去

python manage.py makemigrations

python manage.py migrate

这样来更新我们的数据库,然后我们运行我们的项目可以在后台看到我们新注册的ip的数据

我们根据前面的逻辑,可以来设计我们的代码,

from django.views.generic.base import View
from blog.models import Ip
class RegView(View):
 def get(self,request):
  ipreques = request.META['REMOTE_ADDR']
  try:
   ip_c=Ip.objects.get(ip=ipreques)
   if ip_c :
    if (datetime.datetime.now()-ip_c.time).total_seconds()<600:
     return render(request, 'login.html', {'msg': u'10分钟内只能注册一次'})
    ip_c.time=datetime.datetime.now()
    ip_c.save()
    return render(request, 'reg.html')
  except Exception as e:
   new=Ip()
   new.ip=str(ipreques)
   new.time=datetime.datetime.now()
   new.save()
   return render(request, 'reg.html')
 def post(self,request):
  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=passwor1
    use1.mobile=shouj
    use1.email=youjian
    use1.save()
    return HttpResponseRedirect('login')
   else:
    return render(request,'reg.html',{'msg':u'请查看密码是否一致'})
  return render(request,'reg.html')

其实这样,我们的整个过程就已经构建完毕,代码出来后,有小伙伴会问,你这代码怎么和我用的不一样,

我们都是函数式编程,其实很简单,我们去集成View类就可以实现我们的面向对象的编程,在url中我们只需要这么来写我们的代码。

url(r'^reg$', RegView.as_view(),name='reg'),

这样我们就可以完成了限制同个ip一段时间的注册的次数。

以上这篇django实现同一个ip十分钟内只能注册一次的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python Pygame的具体使用讲解
Nov 03 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
Python List cmp()知识点总结
Feb 18 Python
django做form表单的数据验证过程详解
Jul 26 Python
Python ATM功能实现代码实例
Mar 19 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
Python根据字符串调用函数过程解析
Nov 05 Python
Python环境搭建过程从安装到Hello World
Feb 05 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 #Python
python使用PyCharm进行远程开发和调试
Nov 02 #Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 #Python
详解Python里使用正则表达式的ASCII模式
Nov 02 #Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
Nov 02 #Python
python中实现精确的浮点数运算详解
Nov 02 #Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 #Python
You might like
打造计数器DIY三步曲(中)
2006/10/09 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
PHP实现事件机制的方法
2015/07/10 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
详解React 条件渲染
2020/07/08 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
几个数据库方面的面试题
2016/07/01 面试题
合伙经营协议书范本
2014/04/18 职场文书
会计求职信
2014/05/29 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
中国世界遗产导游词
2015/02/13 职场文书