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')

猜你喜欢

转载自www.cnblogs.com/godlover/p/12203117.html
bbs