Django學習系列之captcha 驗證碼插件
阿新 • • 發佈:2017-09-21
應用 自動 sta 前端 流程 bsp msg char erro
安裝部署
安裝captcha
pip3.6 install django-simple-captcha==0.4.6
settings.py中引入captcha
INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘captcha‘, ]
url.py配置
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r‘^admin/‘, admin.site.urls), url(r‘^captcha/‘, include(‘captcha.urls‘)), ]
數據庫同步
makemigrations
migrate
應用
效果
定義forms.py
from django import forms from captcha.fields import CaptchaField #對表單進行判斷class RegisterForm(forms.Form): email = forms.EmailField(required=True) password = forms.CharField(required=True,min_length=5) captcha = CaptchaField(error_messages={"invalid":"驗證碼錯誤"}) #加入這條
views.py
from django.views.generic.base
import
View
from .forms import RegisterForm
from django.shortcuts import render,HttpResponse
‘‘‘註冊賬戶‘‘‘ class RegisterView(View): #顯示註冊頁面 def get(self,request): #把form傳給前端,裏邊是驗證碼需要在前端顯示 register_form = RegisterForm() return render(request,‘register.html‘,{‘register_form‘:register_form}) #接收提交的數據,進行邏輯判斷 def post(self,request): register_form = RegisterForm(request.POST) if register_form.is_valid(): user_name = request.POST.get(‘email‘, ‘‘) #去庫裏查詢有沒有這個郵箱,有就是已經註冊過了 if UserProfile.objects.filter(email=user_name): return render(request,‘register.html‘,{‘register_form‘:register_form,‘msg‘:‘用戶已經存在‘}) #沒有就是新用戶,繼續流程 else: #獲取前端填的表單,寫進user庫裏 pass_word = request.POST.get(‘password‘, ‘‘) user_profile = UserProfile() user_profile.username = user_name user_profile.email = user_name user_profile.password = make_password(pass_word) #加密密碼之後再存入庫 user_profile.save() send_register_email(user_name,‘register‘) return render(request,‘login.html‘) else: return render(request,‘register.html‘,{‘register_form‘:register_form})#把register_form傳給前端是因為 這裏包含錯誤信息,需要在前端顯示
HTML頁面引用驗證碼
<div class="tab-form"> <form id="email_register_form" method="post" action="{% url ‘register‘ %}" autocomplete="off"> <input type=‘hidden‘ name=‘csrfmiddlewaretoken‘ value=‘gTZljXgnpvxn0fKZ1XkWrM1PrCGSjiCZ‘ /> <div class="form-group marb20 {% if register_form.errors.email %} errorput {% endif %}"> <label>郵 箱</label> <input type="text" id="id_email" name="email" value="None" placeholder="請輸入您的郵箱地址" /> </div> <div class="form-group marb8 {% if register_form.errors.password %} errorput {% endif %}"> <label>密 碼</label> <input type="password" id="id_password" name="password" value="None" placeholder="請輸入6-20位非中文字符密碼" /> </div> <div class="form-group marb8 captcha1 {% if register_form.errors.captcha %} errorput {% endif %} "> <label>驗 證 碼</label> {{ register_form.captcha }} #加入這條 </div> <div class="error btns" id="jsEmailTips"> {% for key, error in register_form.errors.items %} {{ error }} {% endfor %} {{ msg }} </div> <div class="auto-box marb8"> </div> <input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="註冊並登錄" /> {% csrf_token %} </form> </div>
流程:
1.在這個頁面,填完郵箱,密碼,驗證碼後提交表單
2.把表單數據交給django-form驗證
3.forms.py的RegisterForm中email和password字段驗證輸入的數據符不符合forms中定義的格式要求(密碼是不是小於5位之類的),captcha驗證驗證碼輸入是否正確,註意是不一樣的
4.驗證碼的輸入框和圖片是captcha自動生成的
Django學習系列之captcha 驗證碼插件