zoukankan      html  css  js  c++  java
  • 仿博客项目系统

    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')
    
  • 相关阅读:
    【ClickHouse 技术系列】 ClickHouse 聚合函数和聚合状态
    【ClickHouse 技术系列】 ClickHouse 中的嵌套数据结构
    报表功能升级|新增的这4项图表组件太太太好用了吧!
    【视频特辑】数据分析师必备!快速制作一张强大好用的大宽表
    使用云效Codeup10分钟紧急修复Apache Log4j2漏洞
    技术干货 | 使用 mPaaS 配置 SM2 国密加密指南
    “全”事件触发:阿里云函数计算与事件总线产品完成全面深度集成
    3类代码安全风险如何避免?
    为余势负天工背,云原生内存数据库Tair助力用户体验优化
    LeetCode_Search for a Range
  • 原文地址:https://www.cnblogs.com/godlover/p/12203117.html
Copyright © 2011-2022 走看看