Django

django图片验证码

2017-07-29  本文已影响0人  赖三石

需要check_code.py (外部)
需要Pillow模块
需要Monaco.ttf字体文件 (外部)

在app01中新建account.py


account.py

# -*- coding:utf-8 -*-
from django.shortcuts import HttpResponse
from app01 import check_code
from io import BytesIO

def check_code111(request):
    img, code = check_code.create_validate_code()  #执行check_code文件内的create_validate_code()方法
    stream = BytesIO() #建立一个内存区域
    img.save(stream, 'PNG')  #以PNG格式存入内存
    request.session['Check_code'] = code  #验证码存入session
    return HttpResponse(stream.getvalue())  #把生成的图片返回给img

urls.py
*** img 的src 映射过来的的是一个网页***

from django.conf.urls import url
from django.contrib import admin
from app01 import views
from app01 import account

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.login, name='login'),
    url(r'^index/$', views.index, name='index'),
    url(r'^check_code.html$', account.check_code111),
]

views.py

from django.shortcuts import render, redirect

# Create your views here.

def login(request):
    if request.method == 'POST':
        u = request.POST.get('username')
        p = request.POST.get('password')
        c = request.POST.get('code')
        if c.upper() == request.session.get('Check_code').upper(): #比较输入的验证码与生成图片时存入的验证码是否一致
            res = redirect('/index/')
            res.set_cookie('user', u)
            res.set_cookie('pass', p)
            return res
        else:
            return render(request, 'login.html')
    else:
        return render(request, 'login.html')

def index(request):
    u = request.COOKIES.get('user')
    p = request.COOKIES.get('pass')
    return render(request, 'index.html', {'u':u, 'p':p})

template---login.html

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    <p>username:<input type="text" name="username"></p>
    <p>password<input type="password" name="password"></p>
    <p><input type="text" placeholder="check_code" name="code">&nbsp;&nbsp;![](check_code.html)</p>
<!--***注意此处src="check_code.html"-->
    <p><input type="submit" value="submit"></p>
</form>
</body>
<script>
    function img111(ths){
        ths.src = ths.src + '?'
    }
</script>
</html>

template---index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>OK</h1>
user:{{ u }}
pass:{{ p }}
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读