django 中验证码登录验证的实现

来源:互联网 发布:淘宝评论如何上传视频 编辑:程序博客网 时间:2024/05/22 14:47

django中有关于登录验证的第三方模块,大家可以自己去搜搜,这里说一下自定义验证码登录的情况(可以参考http://www.cnblogs.com/alex3714/articles/6662365.html这篇文章)。

我们生成的验证码图片在发送给html前要先存放,可以有两种地方:

1.内存中,我们开发环境下时可以这样用,但是在生产时最好别这样,因为访问量太高的话,你内存就等着爆吧;

2.static(静态文件)中,并且可以设置在用了登录成功后可以立即删除掉图片,节省开销。


至于具体的实现过程,可以看上面的文章,不过有几个细节作者没有说清楚,我是根据我自己的情况将它完善了。

1.表单

<form action="/code/checkcode/" method="post">    {% csrf_token %}    <div class="form-group">        <div class="input-group">            <div class="input-group-addon">                <img height="30px" src="/static/image/{{ today_str }}/{{ filename }}.png" />            </div>            <input style="height: 50px" type="text" name="verify_code" class="form-control" placeholder="验证码">            <input  type="submit" name="verify_code_key" value="submit" >        </div>    </div></form>
2.setting.py存储路径设置

VERIFICATION_CODE_IMGS_DIR = 'E:\web project\web\webchat\static\image'

3.登录和验证

def acc_login(request):    today_str = datetime.date.today().strftime("%Y%m%d")    verify_code_img_path = "%s/%s" %(settings.VERIFICATION_CODE_IMGS_DIR, today_str)    if not os.path.isdir(verify_code_img_path):        os.makedirs(verify_code_img_path,exist_ok=True)    print("session:", request.session.session_key)    random_filename = "".join(random.sample(string.ascii_lowercase,4))    random_code = verify_code.gene_code(verify_code_img_path,random_filename)    cache.set('my_code', random_code,30)    return render(request, 'login.html', {"filename": random_filename, "today_str": today_str})def checkcode(request):    err_msg = ''    if request.method == "POST":        _verify_code = request.POST.get('verify_code')        if cache.get('my_code') == _verify_code:            err_msg = 'successful'        else:            err_msg = "error!"    return render(request, 'test.html', {'error': err_msg})
4.最后验证码图片可以自己设置删除,节省开销,很简单的,就不写了。



原创粉丝点击