前后端不分离

***在图片上写代码,发送到前台,进行验证码 校验
from
PIL import Image,ImageDraw,ImageFont """ Image 生成图片的 ImageDraw 在图片上写东西的 ImageFont 控制字体样式的 """ from io import BytesIO,StringIO """ io是一个内存管理器模块 BytesIO 能够帮你存储数据 二级制格式 StringIO 能够帮你存储数据 字符串格式 """ import random def get_random(): return random.randint(0,255),random.randint(0,255),random.randint(0,255) def get_code(value): # 在产生的图片上 写验证码 img_obj = Image.new('RGB', (360,35), get_random()) img_draw = ImageDraw.Draw(img_obj) # 生成一个可以在图片上写字的画笔对象 img_font = ImageFont.truetype('static/font/222.ttf',30) # 字体样式 及 大小 io_obj = BytesIO() # 图片验证码 一般都是有 数字 大写字母 小写字母 # 五位 每一位都可以 数字或大写字母或小写字母 code = '' for i in range(5): upper_str = chr(random.randint(65,90)) low_str = chr(random.randint(97,122)) random_int = str(random.randint(0,9)) # 随机取一个 temp_code = random.choice([upper_str,low_str,random_int]) # 朝图片上写 img_draw.text((70+i*45,0),temp_code,get_random(),font=img_font) code += temp_code print(code) # 将产生的随机验证码 存入session中 以便后续其他视图函数获取 校验验证码 request.session['code'] = code img_obj.save(io_obj,'png') return HttpResponse(io_obj.getvalue())
models.py

from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserInfo(AbstractUser):
    phone = models.BigIntegerField(null=True,blank=True)  # blank是用来告诉admin后台 该字段可以不填
    # avatar存的是用户头像文件路径 用户上传的头像会自动保存到avatar文件夹下
    avatar = models.FileField(upload_to='avatar/',default='avatar/default.jpg')
    create_time = models.DateField(auto_now_add=True)

    blog = models.OneToOneField(to='Blog',null=True)

    class Meta:
        verbose_name_plural = '用户表'
        # verbose_name =  '用户表'

    def __str__(self):
        return self.username


class Blog(models.Model):
    site_title = models.CharField(max_length=32)
    site_name = models.CharField(max_length=32)
    site_theme = models.CharField(max_length=255)


    def __str__(self):
        return self.site_name

class Category(models.Model):
    name = models.CharField(max_length=32)
    blog = models.ForeignKey(to='Blog')
    def __str__(self):
        return self.name

class Tag(models.Model):
    name = models.CharField(max_length=32)
    blog = models.ForeignKey(to='Blog')
    def __str__(self):
        return self.name


class Article(models.Model):
    title = models.CharField(max_length=255)
    desc = models.CharField(max_length=255)
    content = models.TextField()  # 存大段文本
    create_time = models.DateField(auto_now_add=True)

    # 数据库优化字段
    comment_num = models.IntegerField(default=0)
    up_num = models.IntegerField(default=0)
    down_num = models.IntegerField(default=0)

    # 外键字段
    blog = models.ForeignKey(to='Blog',null=True)
    category = models.ForeignKey(to='Category',null=True)
    tag = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article','tag'))

    def __str__(self):
        return self.title

class Article2Tag(models.Model):
    article = models.ForeignKey(to='Article')
    tag = models.ForeignKey(to='Tag')



class UpAndDown(models.Model):
    user = models.ForeignKey(to='UserInfo')
    article = models.ForeignKey(to='Article')
    is_up = models.BooleanField()  # 传布尔值  存0/1


class Comment(models.Model):
    user = models.ForeignKey(to='UserInfo')
    article = models.ForeignKey(to='Article')
    content = models.CharField(max_length=255)
    create_time = models.DateField(auto_now_add=True)
    parent = models.ForeignKey(to='self',null=True)

相关文章: