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)