驗證碼插件--django captcha和郵箱驗證機制
對於web開發在用戶注冊登錄的環節的驗證碼是在開發中必不可少的一個環節,這里介紹一下我在開發中經常使用到的一個帶三方的驗證碼插件--
captcha
一、安裝
在GitHub上可以直接下載:
也可以使用pip進行安裝:
二、導入
1.settings.py文件
這里需要在INSTALLED_APPS中將其注冊進去:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App01',
'crispy_forms',
'captcha',
]
2.form.py文件
因為是做用戶注冊使用,這里定義一個注冊使用的form表單
from django import forms
from captcha.fields import CaptchaField
class RegisterForm(forms.Form):
username = forms.CharField(required=True)
password = forms.CharField(required=True,min_length=5)
email = forms.EmailField(required=True)
captcha = CaptchaField() #直接引用
3.view.py文件
from . import forms
class User_reg(View):
def get(self,request):
register_form = forms.RegisterForm
return render(request,'reg.html',{"register_form":register_form}) #form表單發送到前端進行渲染
def post(self,request):
pass
4.models.py文件
class EmailVerifyRecord(models.Model):
code = models.CharField(max_length=20,verbose_name="驗證碼")
email = models.EmailField(max_length=50,verbose_name="郵箱")
send_type = models.CharField(verbose_name="驗證碼類型",choices=(("register","注冊"),("forget","找回密碼")),max_length=50)
send_time = models.DateTimeField(verbose_name="發送時間",default=datetime.now)
4.reg.html頁面
5.前端渲染的效果:
下面是頁面的源碼
后端數據庫生成的id值
三、用戶注冊驗證
1.views.py文件
from django.contrib.auth.hashers import make_password #用來將明文密碼進行加密
class User_reg(View):
def get(self,request):
# register_form = forms.RegisterForm
return render(request,'reg.html',{})
def post(self,request):
register_form = forms.RegisterForm(request.POST)
if register_form.is_valid():
user_name = request.POST.get('username','')
user_email = request.POST.get("email",'')
pass_word = request.POST.get("password",'')
user_profile = models.Userinfo()
user_profile.username = user_name
user_profile.email = user_email
user_profile.password=make_password(pass_word)
user_profile.save()
send_register_email(user_email,"register")
return render(request,'login.html')
else:
return render(request,"reg.html",{"register_form":register_form})
激活
1.urls.py文件
urlpatterns = [
url(r'^admin/', admin.site.urls),
url('^$',TemplateView.as_view(template_name="index.html"),name='index'),
url(r'^login/$',views.User_login.as_view(),name='login' ),
url(r'^reg/$',views.User_reg.as_view(),name='reg' ),
url(r'^active/(?P<acctive_code>.*)/$',views.AciveUserView.as_view(),name='user_active'), #用戶進行郵箱激活的url
]
2.views.py文件
class AciveUserView(View):
def get(self,request,active_code):
all_records = models.EmailVerifyRecord.objects.filter(code=active_code)
if all_records:
for record in all_records:
email = record.email
user = models.Userinfo.get(email=email)
user.is_active = True #這個用戶表中的一個字段,用於驗證用戶是否進行郵政驗證激活過
user.save()
return render(request,'login.html')