Django

用自己的表继承user表

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    tel = models.CharField(max_length=32)

并在settings中配置

AUTH_USER_MODEL = 'app01.UserInfo'

 用PIL生成随机验证码图片

import random
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO


# 验证码视图
def get_valid_img(request):

    def get_random_color():
        return (
            random.randint(
                0, 255), random.randint(
                0, 255), random.randint(
                0, 255))
    #
    # img=Image.new("RGB",(350,38),get_random_color())
    # f=open("valid.png","wb")
    # img.save(f,"png")
    # with open("valid.png","rb") as f:
    #     data=f.read()

    # 方式3:
    # img=Image.new("RGB",(350,38),get_random_color())
    # f=BytesIO()
    # img.save(f,"png")
    # data=f.getvalue()

    # # 方式4:完善文本
    #
    # img=Image.new("RGB",(350,38),get_random_color())
    # draw=ImageDraw.Draw(img)
    # font=ImageFont.truetype("static/font/kumo.ttf",32)
    # draw.text((0,0),"python!",get_random_color(),font=font)
    #
    # # 写与读
    # f=BytesIO()
    # img.save(f,"png")
    # data=f.getvalue()

    # 方式5:

    img = Image.new("RGB", (125, 38), get_random_color())
    draw = ImageDraw.Draw(img)
    font = ImageFont.truetype("static/font/kumo.ttf", 32)

    keep_str = ""
    for i in range(5):
        random_num = str(random.randint(0, 9))
        random_lowalf = chr(random.randint(97, 122))
        random_upperalf = chr(random.randint(65, 90))
        random_char = random.choice(
            [random_num, random_lowalf, random_upperalf])
        draw.text((i * 25, 0), random_char, get_random_color(), font=font)
        keep_str += random_char

    width = 125
    height = 38
    for i in range(3):
        x1 = random.randint(0, width)
        x2 = random.randint(0, width)
        y1 = random.randint(0, height)
        y2 = random.randint(0, height)
        draw.line((x1, y1, x2, y2), fill=get_random_color())

    for i in range(5):
        draw.point([random.randint(0, width), random.randint(
            0, height)], fill=get_random_color())
        x = random.randint(0, width)
        y = random.randint(0, height)
        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())
    # 写与读
    f = BytesIO()
    img.save(f, "png")
    data = f.getvalue()

    print('keep_str', keep_str)

    # 将验证码存在各自的session中

    request.session['keep_str'] = keep_str

    return HttpResponse(data)

此视图函数对应的url即为图片地址,校验时通过session取到的值与ajax的发送数据进行比较,注意大小写,建议使用upper比较大写

 

posted @ 2018-11-05 18:50  YaoSir66  阅读(172)  评论(0编辑  收藏  举报