Django Pillow
BBS项目数据设计
数据库设计: User -id -name -password -email -phone -avatar 用户头像 -create_date 用户注册时间 -blog Blog -id -title #博客标题 -site_name #站点名称 -theme category(分类): #一个站点可以有多个分类,但分类只属于创建分类那个人的站点 -nid -title -blog 跟blog一对多 tag:(文章关键字) -id -title -blog 跟blog一对多 article -id -title -desc 摘要 -create_time auto_add_now:当该条记录创建时,自动添加当前时间 -content 文章内容 -category 一对多 一个分类可以有多个文章 -tag 多对多 多个文章可以有多个关键字 -blog 一对多 一个博客站点可以有多个文章 commit(评论) -id -user 哪个用户 外键 -article 对哪篇文章 外键 -content 评论了什么内容 -commit_time 时间 -parent_id 这个绑定commit 的id nid user article content parent_id 1 1 1 111 null 2 2 1 222 null 3 3 1 333 1 4 4 1 444 3 5 3 1 555 4 UpandDown(点赞数 反对数) -nid -user 哪个用户 -article 对哪篇文章 -is_up 点赞还是点踩
Pillow
from django.shortcuts import render, HttpResponse from PIL import Image,ImageDraw,ImageFont import random from io import BytesIO def get_valid_code(request): # 第一种方式 with open('static/img/lhf.jpg','rb') as f: # 图片二进制 data=f.read() return HttpResponse(data) # 第二种方式:随机生成一张图片 # pip3 install Pillow # pillow 是一个图形处理的模块,功能很强强大 # 生成一张图片,第一个参数是模式:RGB,第二个参数是图片大小,第三个参数是图片颜色 img = Image.new('RGB', (320, 35), color=get_random_color()) # 保存到本地 with open('valid_code.png', 'wb') as f: # 直接用img的save方法,第一个参数是空文件,第二个参数图片格式 img.save(f, 'png') # 打开文件,再返回 with open('valid_code.png', 'rb') as f: data = f.read() return HttpResponse(data) #from io import BytesIO #BytesIO 是在内存中生成空文件进行管理 能自动清理 速度更快 # 第三种方式 # 在内存中生成一个空文件(把它想象成 open('valid_code.png', 'wb') as f:) # 一个是在硬盘上,一个是在内存中 img = Image.new('RGB', (320, 35), color=get_random_color()) f = BytesIO() # 把图片保存到f中 # 放到内存中,存取比较快,而且有自动清理 img.save(f, 'png') data = f.getvalue() return HttpResponse(data) # 第四种方式,在图片上写文字 img = Image.new('RGB', (320, 35), color=get_random_color()) # 拿到画笔,把图片传入画笔 img_draw=ImageDraw.Draw(img) # 生成一个字体对象,第一个参数是字体文件的路径,第二个参数是字体大小 font=ImageFont.truetype('static/font/ss.TTF',size=25) # 第一个参数,xy的坐标,第二个参数:要写的文字,第三个参数:写文字的颜色,第四个参数:字体 # 不同的字体是不同的ttf文件 img_draw.text((0,0),'python',get_random_color(),font=font) f = BytesIO() # 把图片保存到f中 # 放到内存中,存取比较快,而且有自动清理 img.save(f, 'png') data = f.getvalue() return HttpResponse(data)