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

很多小伙伴都会有这样的问题,说一个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十分钟内只能注册一次的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python使用django获取用户IP地址的方法

    本文实例讲述了Python使用django获取用户IP地址的方法.分享给大家供大家参考.具体如下: 函数实现: def get_client_ip(request): try: real_ip = request.META['HTTP_X_FORWARDED_FOR'] regip = real_ip.split(",")[0] except: try: regip = request.META['REMOTE_ADDR'] except: regip = "" r

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

    很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦 逻辑: 取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注册,到登录界面,大于600可以注册, 设计一个数据库来存储这个ip地址和访问时间, class Ip(models.Model): ip=models.CharField(max_length=20) time=models.DateTimeField() class Meta: verbose_n

  • Python编程django实现同一个ip十分钟内只能注册一次

    很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦 逻辑: 取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注册,到登录界面,大于600可以注册,设计一个数据库来存储这个ip地址和访问时间, class Ip(models.Model): ip=models.CharField(max_length=20) time=models.DateTimeField() class Meta: verbose_na

  • 十分钟内学会 避免用户刷新导致重复POST提交

    Question 在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交.即使用户成功打开了POST提交目标页,之后他通过链接导航到别处了,再退回到POST提交目标页时仍可能会重复提交页面(例如因为浏览器缓存已失效).而且,只要碰到重复POST提交的场景,浏览器就会问用户是否确认重做此操作,用户并不一定能正确理解重做意味着重做什么,浏览器又不允许网站向用户解释清楚,所以这属于非常不友善的设计.那么我们应该如何避

  • django实现登录时候输入密码错误5次锁定用户十分钟

    在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱,于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个简单的,后续在拆分后,然后在去进行拆分, 这样也是很接近我们在真实的开发中所遇到问题. 我的思路是: 输入账号密码>是否已经登录>提示已经登录 输入账号密码>错误次数少于6次>校验密码>登录成功,记录登录时间,错误次数清空,记录登录状态 输入账号密码>错误大于六次>提示

  • Java十分钟精通类 封装 继承

    目录 什么是类成员 什么是实例变量 那么实例变量和类变量的区别呢? 那么类方法和实例方法的区别? static关键字 static成员方法: static用处: 封装: 封装的概念 封装的分类 封装的使用 继承: 什么是继承 继承的使用: 方法重写的规则: super关键字: 什么是类成员 使用static修饰的成员方法和成员变量称为类成员 使用static修饰的成员变量叫做类变量 使用static修饰的成员方法叫做类方法 什么是实例变量 未使用static修饰的成员方法和成员变量称为实例成员

  • Java十分钟快速掌握单例模式

    目录 前言 1.什么是单例模式: 2.单例模式的优缺点: 3.懒汉模式(比较常用) 4.饿汉模式[推荐使用] 5.单例模式的应用场景 6.单例模式的应用实例 小结: 前言 首先在Java中有23种设计模式: 创建型模式: 工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式结构型模式: 适配器模式.装饰者模式.代理模式.外观模式.桥接模式.组合模式.享元模式行为型模式::策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释

  • 如何使用 Rails 和七牛云存储,在 15 分钟内打造一个图片分享社交应用原型

    十年前,Web 应用框架 Rails 创始人 David Heinemeier Hansson 曾录制视频,向我们演示如何使用 Ruby on Rails 在 15 分钟内创作一个 blog 引擎.这个视频通过 Rails 优秀的 MVC .习惯优于配置(Convention over Configuration)等设计,以及强大的代码生成.scaffold 等功能,成功展示了 Ruby on Rails 编写 Web 应用核心功能的高效简洁.Ruby on Rails 这门技术也在 Web 2

  • Java十分钟入门多线程中篇

    目录 1.线程的调度: 1.设置优先级(Priority): 2.休眠(sleep) 3.强制运行(join) 4.礼让(yield) 2.定时器线程: 3.线程的同步: 举例说明: 我们知道飞机在天上飞行是有固定的航线(可以理解成线程),每个机场都有最大的运行负载能力,当运行情况超过了负载能力的时候,这就需要塔台调度参与,会根据每架飞机的优先级排序.当在航线的时候,如果出现紧急情况,会让其他飞机避让,让这架飞机优先级提高,先降落.这就是调度,计算机程序线程运行也是这样的. 1.线程的调度: 在

  • Java十分钟入门多线程上篇

    什么是多线程? 在学习前,我们先对程序.进程.线程.并行.并发有个基础的概念了解: 程序: 为完成指定任务,用编程语言编写的一组指令的集合,即指一段静态的代码,静态对象. 进程: 是程序的一次执行过程,是一个动态的过程,进程自身有产生.使用和消亡的过程.(也称为生命周期,在后面会介绍) 线程: 进程可进一步细化为线程,是一个程序内部的一条执行路径,也就是进程内有线程 并行: 指两个或者多个事件在同一时刻发生,(同时发生) 并发: 指两个或者多个事件在同一个时段内发生,(并不是同时发生) 更好的理

  • Java十分钟精通内部类的使用

    内部类: 其实内部类顾名思义,就是类中类,一个类里面还有一个类. 内部类分为四种: 普通内部类 静态内部类 方法内部类 匿名内部类 我们一一去了解一下~~ A.普通内部类: 我们先通过代码去了解一下: package InternalClass; /** * 内部类 */ public class Car { public int a = 10; public int b = 20; //外部类的方法 public void method() { System.out.println("我是外部

随机推荐