12月18日学习内容整理:博客系统之扩展auth_user表,ORM联合唯一,基于ajax的登录验证,PIL(pillow)模块(专门处理图片)
一、扩展auth_user表
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser): 继承
这里再写自己扩展的字段
补充几个类型:
》》》针对文件的FileField() 专门针对图片的ImageField()
upload_to="img/......" django会在项目的根目录下自动创建img文件夹
当前定义的字段只保存文件的路径
》》》保存文章内容 TextField()
》》》CharField()的参数,null=True代表可以为空,unique=True代表唯一
》》》ForeignKey()的参数,to="表名",to_field="字段名"
二、ORM中的联合唯一
在定义的类中:
class Meta:
unique_together = [
('字段1', '字段2',.......),
]
补充:
加载img标签时也会向服务端发送请求
客户端可以直接请求到服务端/static/中的文件
三、PIL(pillow)模块
from PIL import Image
1、实例化图片对象
img=Image.new(
mode="REG" 指定图片模式
size=(123,342) 指定图片的大小
color="red" 指定图片的颜色,也可以color=(233,12,23)这样去调色,最大255
)
这样就得到了一个图片对象
2、生成一张图片,保存在本地
(1)打开图片
f=open("文件路径+文件名","wb")
(2)保存图片
img.save(f,"png")
这样就在指定的路径下生成了一张图片
3、在open使用rb模式读取图片传给前端
4、我们每生成一张图片就保存在本地,这样有点浪费空间,比如验证码图片我们就不需要把它保存起来,只保存验证码即可,
那如何把一张图片保存在内存中:
from io import BytesIO
(1)生成图片
f=BytesIO()
img.save(f,"png")
(2)读取图片
直接f.getvalue(),这样就不用去读取文件了
5、给生成的图片添加内容
from PIL import ImageDraw,ImageFont
(1)得到对象
draw=ImageDraw.Draw(
img 给哪个图片对象添加内容
mode="RGB" 指定图片的模式
)
(2)添加
》》》文本:draw.text(
(40,40) 指的是在图片中的位置坐标
"pythonasdas" 指的是添加的文本内容
"red" 指的是添加内容的颜色,若是验证码图片的话我们应该用random模块来随机生成颜色和内容
font=font 指的是字体样式,需要引入
)
font=ImageFont.truetype(
"字体样式文件路径" 指定字体文件在哪
24 指的是字体大小,必须指定
)
》》》添加点:dram.point(
(30,20) 左表
fill="red" 颜色
)
》》》添加线:dram.line(
(起始坐标,终止坐标)
fill="red" 颜色
width="" 宽度
)
》》》添加圆:draw.arc()
补充:
1、如何点击图片就自动刷新图片:
给图片标签绑定点击事件
将img标签转换为DOM对象,在用.src属性+=?就会刷新了
2、不使用json模块序列化,前端也不需要再反序列化
from django.http import JsonResponse
return JsonResponse(xxxxxx)这样我们就不用再dumps序列化,前端也不用parse反序列化