很多小伙伴都會有這樣的問題,說一個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