很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦
逻辑:
取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注册,到登录界面,大于600可以注册,设计一个数据库来存储这个ip地址和访问时间,
1
2
3
4
5
6
7
8
|
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的数据
我们根据前面的逻辑,可以来设计我们的代码,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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一段时间的注册的次数。
总结
以上就是本文关于Python编程django实现同一个ip十分钟内只能注册一次的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的。
原文链接:http://www.cnblogs.com/leiziv5/p/7774768.html