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十分钟内只能注册一次的更多相关文章
- django 实现同一个ip十分钟内只能注册一次(redis版本)
上一篇文章,django 实现同一个ip十分钟内只能注册一次 的时候,我们在注册的时候选择使用的使我们的数据库来报错我们的注册的ip信息,可是如果数据量大,用户多的时候,单单靠我们的数据库 来储存我们 ...
- 如何在十分钟内插入1亿条记录到Oracle数据库?
这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能. -- Create table create table TMP_TEST_CHAS_LEE ( f01 VARCHAR ...
- 基于 Laravel-Admin 在十分钟内搭建起功能齐全的后台模板
http://laravelacademy.org/post/6468.html 1.简介 为 Laravel 提供后台模板的项目越来越多,学院君已陆续为大家介绍过Laravel Angular Ad ...
- C# 服务端推送,十步十分钟,从注册到推送成功
目标 展示 C# 服务端集成极光推送的步骤,多图少字,有图有真相. 使用极光推送, C# 服务端推送到 Demo App,Android 手机收到推送,整理为十个步骤,使用十分钟左右,完成从注册账号到 ...
- spring boot 实现密码连续输入错误5次,限制十分钟内不能进行登录
我们要实现的就是,密码连续输入错误5次,就限制用户十分钟不能进行登录. 大致的流程图 数据库设计如下 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ...
- 在Oracle中十分钟内创建一张千万级别的表
小表不会产生性能问题,大表才会.要练习SQL调优,还非得有大表不可.但数据不会自然产生,没有数据时如何创建一张千万级别的大表呢? 之前,我想用Oracle的批量插入语法去插入数据,此语法如下: INS ...
- 使用jsoup十分钟内掌握爬虫技术
对,就是十分钟,没有接触过爬虫的你,肯定一脸懵逼,感觉好高深的样子,一开始我也有点懵,但用了以后发现还是很简单的,java爬虫框架有很多,让我有种选择困难症,通过权衡比较还是感觉jsoup比较好用些, ...
- go语言中如何模拟100个IP同时并发访问服务器,每个ip要重复访问1000次。每个Ip一分钟之内只能访问一次
package main import ( "time" "sync" "fmt" "sync/atomic" ) ty ...
- django 实现登录时候输入密码错误5次锁定用户十分钟
在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱, 于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个 ...
随机推荐
- hadoop各个类及其作用
1.基础包(包括工具包和安全包) 包括工具和安全包.其中,hdfs.util包含了一些HDFS实现需要的辅助数据结构:hdfs.security.token.block和hdfs.security.t ...
- M方法
ThinkPHP函数详解:M方法 M方法用于实例化一个基础模型类,和D方法的区别在于:1.不需要自定义模型类,减少IO加载,性能较好:2.实例化后只能调用基础模型类(默认是Model类)中的方法:3. ...
- Struts2和SpringMVC的区别
简单谈一下Struts2和SpringMVC的区别,文章有所引用知乎所对应的答案数据,和所查看的其余资料数据,进行一个简单的汇总,后续查看时使用: 知乎解释链接为:https://www.zhihu. ...
- Struts 关联DTD 文件
Struts 的xml 文件在Eclipse 中 默认是不会有提示的. 但是我们可以关联DTD 文件, 这样子就可以出现如下的struts 提示了 1. 首先得先确保自己有Struts2 的Sr ...
- 记住密码"功能的正确设计
Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...
- 【转】Python中实现远程调用(RPC、RMI)简单例子
远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了.远程调用是分布式系统的基础. 远程调用一般分为两种,远程过程调用(RPC)和远程 ...
- 学习PID
最近在想自己的文章有些是不是写的太难以理解了呢.........竟然好多人看了还是会直接问我很多问题....... 其实PID哈靠自己想像就能自己写出来自己的代码,也许是网上的讲的太过的高深什么积分微 ...
- DevOps之归纳总结
唠叨话 关于德语关我屁事的知识点,仅提供精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. DevOps归纳总结 <DevOps功能与性能>浏览器(饼干Cookie.会话Sessi ...
- VS2010 c/c++ 本地化 emscripten 配置
配置环境 1.下载emsdk-1.35.0-full-64bit.exe,有VS2010的话直接安装. 2.安装好之后,打开cmd,# emsdk update # emsdk install lat ...
- Java 线程并发
http://www.yesky.com/9/1899009.shtml http://zhidao.baidu.com/link?url=-xZ9JLo5x4bvCSVyXb2XhO6TODnBcU ...