BBS系统
Posted godlover
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BBS系统相关的知识,希望对你有一定的参考价值。
BBS
1.图片验证码生成器
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO, StringIO
import random
# 生成三原色
def get_random():
return random.randint(0,255), random.randint(0,255), random.randint(0,255)
# 获取带背景图片的验证码
def get_code(request):
ima_obj = Image.new('RGB',(350,35),get_random())
# 产生针对该图书的画笔对象
img_draw = ImageDraw.Draw(img_obj)
# 产生一个字体样式对象
img_font = ImageFont.truetype(r'字体样式的路径', 35)
io_obj = BytesIO()
# 产生5位随机验证码,包含大小写字母,和数字
code = ''
for i in range(5):
upper_str = chr(random.randint(65,90))
lower_str = chr(random.randint(97,122))
random_str = str(random.randint(0,9))
# 随机去取上面的一个
temp_str = random.choice([upper_str, lower_str, random_str])
# 写到图片上
img_draw.text((45+i*60, -2), temp_str, get_random(), font=img_font)
# 存储产生的随机码
code += temp_str
img_obj.save(io_obj, 'png')
# 将产生的随机码存储到session中,以便于后面的验证码校验
request.seesion['code'] = code
print(code)
return HttpResponse(io_obj.getvalue())
2.关于用户头像展示 media的配置
网站所用的静态文件我们默认放到static文件夹下,而用户上传的文件也算是静态资源,我们也应该找到一个公共的地方专门存储用户上传的静态文件
要做到无论用户上传的是什么文件都应该保存到指定的文件夹下
? xxx
? avatar
media配置专门用来指定用户上传的静态文件存放路径
配置文件中只需要写下面的配置
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
通用方法
? 如何暴露后端任意的文件夹资源
? form django.views.static import serve
? from day58 import settings
? 暴露任意后端资源配置
url(r‘^media/(?P<path>).*’, serve, {"document_root":settigs.MEDIA_ROOT})
3.图片防盗链
先判断当前发送的请求的页面的url是否属于本网站的
如果是则正常返回图片如果不是就不会返回
如何判断当前请求的页面的url:
请求头里有一个:
Referer: http://127.0.0.1:8000/dadada/
如何解决该问题:
1.利用爬虫直接将所有的资源下载到本地
? 2.修改请求头参数
4.个人站点
侧边栏展示
id title create_time month
1 111 2018-11-23 2018-11
2 222 2019-11-01 2019-11
3 333 2020-8-11 2020-8
4 444 2019-11-30 2019-11
from django.db.models.functions import TruncMonth
-官方提供
from django.db.models.functions import TruncMonth
Article.objects
.annotate(month=TruncMonth('timestamp')) # Truncate to month and add to select list
.values('month') # Group By month
.annotate(c=Count('id')) # Select the count of the grouping
.values('month', 'c') # (might be redundant, haven't tested) select month and count
侧边栏筛选:
就是对当前用户所有的文章再进行过滤筛选
from django.db.models.functions import TruncMonth
Article.object.annotate(month=TruncMonth('create_time')).values('month').annotate(c=Count('pk')).values('month', 'c')
以上是关于BBS系统的主要内容,如果未能解决你的问题,请参考以下文章