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反序列化

posted @ 2017-12-18 14:20  九二零  阅读(135)  评论(0编辑  收藏  举报