• 仿博客项目系统


    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')
    
  • 相关阅读:
    Mysql优化与使用集锦
    用条件注释判断浏览器版本,解决兼容问题
    高效的使用 Response.Redirect
    JS中字符串的相关操作
    Http压力测试工具HttpTest4Net
    纯CSS(无 JavaScript)实现的响应式图像显示
    jquery使用jsonp进行跨域调用
    JS函数重载解决方案
    C# 实现将 PDF 转文本的功能
    iFrame的妙用
  • 原文地址:https://www.cnblogs.com/godlover/p/12203117.html
Copyright © 2020-2023  润新知