zoukankan      html  css  js  c++  java
  • django captcha和邮箱验证机制

    验证码插件--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')
  • 相关阅读:
    Android JSON解析
    相对靠谱的相册、拍照返回选择程序
    android strings.xml转义字符,注意细节解决
    设置progressBar 背景以及进度条
    Android Launcher简易Launcher开发
    android.os.NetworkOnMainThreadException 异常处理
    AspNetPager 多条件分页查询
    无法解析指定对象的 TargetProperty (UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)“的异常解决
    DefaultButton Deal with users hitting ENTER on your forms
    Setup SSRS in SharePoint Integrated Mode
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7859961.html
Copyright © 2011-2022 走看看