首页 > 其他分享 >bbs项目之登录功能

bbs项目之登录功能

时间:2022-08-18 10:12:55浏览次数:42  
标签:功能 obj 登录 img Image random 验证码 io bbs

登陆功能

需要有登录用户名,密码,动态生成验证码和提交按钮,具体效果如下:
image

需要先了解的知识点:

1.img标签的src属性可以放以下三种:
	1.图片路径
	2.url
	3.图片的二进制数据

2.我们的计算机上面致所有能够输出各式各样的字体样式
内部其实对应的是一个个.ttf结尾的文件,免费的ttf字体样式可以去下面这个网址下载使用。
http://www.zhaozi.cn/ai/2019/fontlist.php?ph=1&classid=32&softsq=%E5%85%8D%E8%B4%B9%E5%95%86%E7%94%A8

3.介绍一下新的图片相关的模块
先安装
pip3 install pillow
再导入
from PIL import Image,ImageDraw,ImageFont

Image:生成图片用的
ImageDraw:能够在图片上乱涂乱画
ImageFont:控制字体样式

4.内存管理器模块
from io import BytesIO,StringIO

BytesIO:临时帮你存储数据 返回的时候数据是二进制
StringIO:临时帮你存储数据 返回的时候数据是字符串

视图函数部分

import random
from PIL import Image,ImageDraw,ImageFont
from io import BytesIO,StringIO
def get_random():
    return random.randint(0,255),random.randint(0,255),random.randint(0,255)
def get_code(request):
    # 推导步骤1:直接获取后端现成的图片二进制数据发送给前端
    # with open(r'static/img/111.jpg','rb') as f:
    #     data = f.read()
    # return HttpResponse(data)

    # 推导步骤2:利用pillow模块动态产生图片
    # img_obj = Image.new('RGB',(430,35),'green')
    # img_obj = Image.new('RGB',(430,35),get_random())
    # # 先将图片对象保存起来
    # with open('xxx.png','wb') as f:
    #     img_obj.save(f,'png')
    # # 再将图片对象读取出来
    # with open('xxx.png','rb') as f:
    #     data = f.read()
    # return HttpResponse(data)

    # 推导步骤3:文件存储繁琐IO操作效率低  借助于内存管理器模块
    # img_obj = Image.new('RGB', (430, 35), get_random())
    # io_obj = BytesIO()  # 生成一个内存管理器对象  你可以看成是文件句柄
    # img_obj.save(io_obj,'png')
    # return HttpResponse(io_obj.getvalue())  # 从内存管理器中读取二进制的图片数据返回给前端


    # 最终步骤4:写图片验证码
    img_obj = Image.new('RGB', (430, 35), get_random())
    img_draw = ImageDraw.Draw(img_obj)  # 产生一个画笔对象
    img_font = ImageFont.truetype('static/font/222.ttf',30)  # 字体样式 大小

    # 随机验证码  五位数的随机验证码  数字 小写字母 大写字母
    code = ''
    for i in range(5):
        random_upper = chr(random.randint(65,90))
        random_lower = chr(random.randint(97,122))
        random_int = str(random.randint(0,9))
        # 从上面三个里面随机选择一个
        tmp = random.choice([random_lower,random_upper,random_int])
        # 将产生的随机字符串写入到图片上
        """
        为什么一个个写而不是生成好了之后再写
        因为一个个写能够控制每个字体的间隙 而生成好之后再写的话
        间隙就没法控制了
        """
        img_draw.text((i*60+60,-2),tmp,get_random(),img_font)
        # 拼接随机字符串
        code += tmp
    print(code)
    # 随机验证码在登陆的视图函数里面需要用到 要比对 所以要找地方存起来并且其他视图函数也能拿到
    request.session['code'] = code
    io_obj = BytesIO()
    img_obj.save(io_obj,'png')
    return HttpResponse(io_obj.getvalue())

html部分

<body>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="form-group">
                <h1 class="text-center">登录</h1>
                <label for="id_username">用户名</label>
                <input type="text" class="form-control" id="id_username">
                <label for="id_password">密码</label>
                <input type="password" class="form-control" id="id_password">
            </div>
            <div class="form-group">
                <label for="">验证码</label>
                <div class="row">
                    <div class="col-md-6 ">
                        <input type="text" class="form-control">
                    </div>
                    <div class="col-md-6">
{#                        这里img标签的src属性放的是一个url,访问页面时,会自动向这个地址请求拿到图片数据#}
                        <img src="/get_code" alt="" width="350" height="35" id="commit">
                    </div>
                </div>
            </div>
            <input type="button" class="btn btn-primary form-control" value="登录">
        </div>
    </div>
</div>
</body>
<script>
    // 动态改变验证码,当点击验证码时就刷新
    $('#commit').click(function (){
        // 1.先获取到这个src
        let oldVal = $(this).attr('src');
        // 2.每次点击给这个src加上一个问号
        $(this).attr('src',oldVal+='?')
    })
</script>

标签:功能,obj,登录,img,Image,random,验证码,io,bbs
From: https://www.cnblogs.com/suncolor/p/16594121.html

相关文章

  • 复杂条件查询功能
    复杂条件查询功能分析       总记录数统计的代码实现UserDao接口:/***查询总记录数*@return*@paramcondition*/i......
  • 自动化脚本如何切换环境?Pytest这些功能你必须要掌握
     测试人员每天都跟不同的环境打交道,比如线上环境,测试环境,预上线环境等等,那么作为自动化测试人员写的代码,我们也要具备能自由切换环境的能力,那么今天小编就给大家聊一下,......
  • 部分功能实现笔记
    部分功能实现笔记以下内容均来自武沛齐老师的课程笔记Fields的选择classMyForm(ModelForm):xx=form.CharField*("...")#新加不在数据库中的字段classMe......
  • 如何判断一个系统中的哪些功能会被使用?
    可以根据业务部门人员配比、业务人员对业务投入的日常时间比例情况,来判断一系列功能是否会被客户用到。比如两个客户都有相同的业务部门,一个100人与一个10人,那么他们对系......
  • iphone 熄屏黑屏录像方法-取证拍摄-自带功能
    iphone有个旁白模式是为了残疾盲人的只听模式。1、在设置-辅助功能-辅助功能快捷键-选旁白,这样按三下电源键进入/退出旁白模式。2、把声音调没,这样旁白就不会发......
  • 干货:Easy系列各视频平台云台控制功能的使用注意事项汇总
    TSINGSEE青犀视频旗下Easy系列视频平台,比如EasyCVR、EasyNVR、EasyGBS等,均可支持对摄像头的云台控制,包括摄像头的焦距调整、方向调整等。在视频监控场景中,摄像头的云台控制......
  • ENVI 5.5新功能
    ENVI5.5于2018年2月份正式发布,在ENVI5.5版本中,支持最新WorldView-4等数据;新增ENVIModeler建模工具,可以零代码构建工作流或者批处理;新增ENVIPy,与ArcGIS一体化集成更加简便......
  • 登录功能
    优化页面jsp代码<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><he......
  • 用户信息分页查询功能
    用户信息分页查询功能分析:   具体步骤: 后台代码的实现PageBean实体类:packagecom.peng.ca.domain;importjava.util.List;/***分页工具对象*/pub......
  • 分页查询功能
    分页查询功能分析     分析具体步骤PageBean实体类:/***分页对象*/publicclassPageBean<T>{privateinttotalCount;//总记录数private......