zoukankan      html  css  js  c++  java
  • Django|django_simple_captcha|验证码

    # 1.settings.py
        INSTALLED_APPS = (  
            'captcha',  
        )  
        # django_simple_captcha 验证码配置   
        # 格式  
        CAPTCHA_OUTPUT_FORMAT = u'%(text_field)s %(hidden_field)s %(image)s'  
        # 噪点样式  
        CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null', # 没有样式  
            # 'captcha.helpers.noise_arcs', # 线  
            # 'captcha.helpers.noise_dots', # 点  
        )  
        # 图片大小  
        CAPTCHA_IMAGE_SIZE = (100, 25)  
        CAPTCHA_BACKGROUND_COLOR = '#ffffff'  
        CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge' # 图片中的文字为随机英文字母,如 mdsh  
        # CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'    # 图片中的文字为数字表达式,如1+2=</span>  
          
        CAPTCHA_LENGTH = 4 # 字符个数  
        CAPTCHA_TIMEOUT = 1 # 超时(minutes)  
    
    # 2.forms.py
        from django import forms  
        from maiziedu.models import UserProfile  
        from captcha.fields import CaptchaField  
          
        class RegisterForm(forms.Form):  
            ''''' 
            注册 
            '''  
            username = forms.EmailField(widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "请输入邮箱账号", "value": "", "required": "required",}),  
                                      max_length=50,error_messages={"required": "用户名不能为空",})  
            password = forms.CharField(widget=forms.PasswordInput(attrs={"class": "form-control", "placeholder": "请输入密码", "value": "", "required": "required",}),  
                                      min_length=8, max_length=50,error_messages={"required": "密码不能为空",})  
            # 验证码  
            captcha = CaptchaField()  
          
            def clean(self):  
                  
                # 验证码  
                try:              
                    captcha_x = self.cleaned_data['captcha']              
                except Exception as e:  
                    print 'except: '+ str(e)  
                    raise forms.ValidationError(u"验证码有误,请重新输入")  
          
          
                 # 用户名  
                try:            
                    username=self.cleaned_data['username']  
                except Exception as e:  
                    print 'except: '+ str(e)  
                    raise forms.ValidationError(u"注册账号需为邮箱格式")      
          
          
                # 登录验证          
                is_email_exist = UserProfile.objects.filter(email=username).exists()   
                is_username_exist = UserProfile.objects.filter(username=username).exists()   
                if is_username_exist or is_email_exist:  
                    raise forms.ValidationError(u"该账号已被注册")  
          
          
                # 密码  
                try:  
                    password=self.cleaned_data['password']  
                except Exception as e:  
                    print 'except: '+ str(e)  
                    raise forms.ValidationError(u"请输入至少8位密码");  
          
          
                return self.cleaned_data  
    # 3.views.py
        # 注册  
        # 改为ajax post   
        def register(request):  
            if request.method == 'POST':  
                # 验证码  
                print 'captcha_0: ' + request.POST.get('captcha_0')  
                print 'captcha_1: ' + request.POST.get('captcha_1')  
                try:  
                    reg_form = RegisterForm(request.POST)  
                except Exception as e:  
                    print str(e)  
                    # 登录失败 返回错误提示      
                    err = "注册失败,请重试"  
                    return result_response(request, err)   
          
                if reg_form.is_valid():  
                    print "register success"  
                    try:  
                        username = reg_form.cleaned_data['username']  
                        password = reg_form.cleaned_data['password']  
                        user = UserProfile.objects.create(username = username, email = username,   
                          password = make_password(password), is_active = True)  
                        user.save()  
                        user.backend = 'django.contrib.auth.backends.ModelBackend' # 指定默认的登录验证方式  
                        # 验证成功登录  
                        auth.login(request, user)  
                        return result_response(request, "")  
                    except Exception as e:  
                        print str(e)  
                        setFormTips(reg_form, "注册失败,请重试")  
                else:  
                    print "register failed"  
          
                    if request.POST.get('captcha_1') == "":  
                        setFormTips(reg_form, "验证码不能为空")   
          
                # 登录失败 返回错误提示      
                err = getFormTips(reg_form)  
                return result_response(request, err)   
            else:  
                reg_form = RegisterForm()  
              
            return render(request, 'index.html', locals())  
    
    # 4.index.html
        ①第一种
            {{ reg_form.captcha }}  
            # 这种方法对页面的适应性不太好,如上面模板变量生成html如下:
                <input autocomplete="off" id="id_captcha_1" name="captcha_1" type="text">  
                <input id="id_captcha_0" name="captcha_0" type="hidden" value="e91228ab45df7338b59b64cb0eae1b60a48fd125">  
                <img src="/%2Fimage/e91228ab45df7338b59b64cb0eae1b60a48fd125/" alt="captcha" class="captcha">  
        ②第二种
        # views.py
            from captcha.models import CaptchaStore  
            from captcha.helpers import captcha_image_url  
            hashkey = CaptchaStore.generate_key()  
            imgage_url = captcha_image_url(hashkey) 
        # index.html
            <input type="text"  id="id_reg_captcha_1" name="captcha_1" class="form-control form-control-captcha fl" placeholder="请输入验证码"><span class="v5-yzm fr"><a href="#" class="next-captcha"><img src="{{ imgage_url }}" class="captcha" alt="captcha">换一张</a></span>
            <input id="id_reg_captcha_0" name="captcha_0" type="hidden" value="{{ hashkey }}"> 

    作者:一只虫

    转载请注明出处



    github :https://github.com/mbi/django-simple-captcha
    document :http://django-simple-captcha.readthedocs.io/en/latest/


  • 相关阅读:
    Python:Fatal error in launcher: Unable to create process using 问题排查
    接口测试及接口Jmeter工具介绍
    bug的分类和等级
    如何编写测试用例
    网络流入门--最大流算法Dicnic 算法
    Codevs 1004 四子连棋
    洛谷 P1072 Hankson 的趣味题
    Codevs 搜索刷题 集合篇
    洛谷 P1195 口袋的天空
    洛谷 P1362 兔子数
  • 原文地址:https://www.cnblogs.com/bkylkh/p/9122194.html
Copyright © 2011-2022 走看看