首页 > 其他分享 >BBS登录

BBS登录

时间:2023-05-09 22:01:24浏览次数:27  
标签:code obj img 登录 randint random 验证码 BBS

随机验证码

需要导入的模块
"""
图片相关的模块
    pip3 install pillow
"""
from PIL import Image, ImageDraw, ImageFont

"""
Image:生成图片
ImageDraw:能够在图片上乱涂乱画
ImageFont:控制字体样式
"""
from io import BytesIO, StringIO

"""
内存管理器模块
BytesIO:临时帮你存储数据 返回的时候数据是二进制
StringIO:临时帮你存储数据 返回的时候数据是字符串
"""
import random

随机验证码的代码
def get_random():
    return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)


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

    # 随机验证码  五位数的随机验证码  数字 小写字母 大写字母
    code = ''
    for i in range(6):
        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())

image

login_html前端body代码

body代码
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <h1 class="text-center">登录页面</h1>
            <div class="form-group">
                <label for="username">用户名:</label>
                <input type="text" id="username" class="form-control">
            </div>
            <div class="form-group">
                <label for="password">密码:</label>
                <input type="password" id="password" class="form-control">
            </div>
            <div class="form-group">
                <label for="code">验证码:</label>
                <div class="row">
                    <div class="col-md-6">
                        <input type="text" id="code" class="form-control">
                    </div>
                    <div class="col-md-6">
                        <img src="/get_code/" alt="" id="img_code" style="width: 365px;height: 38px;">
                    </div>
                </div>
            </div>
            <input type="button" class="btn btn-success" value="登录">
        </div>
    </div>
</div>

image
src里面插入的是get_code方法

ajax代码

image

通过触发img点击事件
attr(‘src’)可以得到标签属性对应的值,然后对这个值进行改变从而得到每次点击验证码会生成一个新的验证码

  1. 获取前端输入的数据
    image

  2. 然后再对这些数据进行参数验证
    image

  3. 将数据保存到字典里面
    var obj = {username:username, password:password, code:code, csrfmiddlewaretoken:'{{ csrf_token }}'};

由于没有文件,所以可以直接创建字典

  1. 把参数提交到后端,发起Ajax请求
    image

views视图函数

  1. 返回数据格式
    image
  2. 接收参数
    image
  3. 验证参数
    image

将验证码切换成不区分大小写的条件,所以全部换成大写或者小写

  1. 处理业务逻辑
    image

通过filter对数据库里面的账号密码进行比对,如果存在user_obj对象的话,则账号密码正确

  1. 登录成功,保存用户状态
    image
    将用户名和对应的id存入session中,进而保存用户的登录状态,默认14天

标签:code,obj,img,登录,randint,random,验证码,BBS
From: https://www.cnblogs.com/whxx/p/17386430.html

相关文章

  • BBS注册
    models模板创建表字段如果想要在django自带的user表中增加新的字段那么需要在数据库迁移前创建就需要在在settings里面配置AUTH_USER_MODEL='app01.UserInfo'在写字段时先写普通字段之后再写外键字段models文件里面的代码fromdjango.contrib.auth.modelsimportAbstr......
  • 注册和登录
    表结构设计fromdjango.dbimportmodels#Createyourmodelshere.fromdjango.contrib.auth.modelsimportAbstractUser'''先写普通字段,再考虑外键字段'''#用户表classUserInfo(AbstractUser):#继承了Auth模块,下面是我们额外加的字段phone=model......
  • vue2+vant2+rem+axios+钉钉自动登录 h5模板
    下载代码请轻轻的点一下这里~Node版本要求VueCLI需要Node.js8.9或更高版本(推荐8.11.0+)。你可以使用nvm或nvm-windows在同一台电脑中管理多个Node版本。本示例Node.js14.17.0启动项目npminstallnpmrundev打包项目打测试包会带vconsole控制台对......
  • linux|Windows|Xshell——Windows远程连接Linux服务器进行上传、下载文件,用远程登录工
    Windows远程连接Linux服务器进行操作时总会需要上传、下载文件。要实现这个目的,既可以通过FTP的方式,也可以在本地终端使用scp命令。但如果是使用Xshell等工具操作服务器的话,最简单的方法就是其自带支持的sz、rz命令了。这两个命令可以直接上传、下载文件,并自动弹出文件选择框,操作......
  • 第二节:BBS数据库表结构设计
    目录BBS数据表表结构设计一、用户表:UserInfo二、博客表:Blog三、文章表:Article四、标签表:Tag五、分类表:Category六、评论表:Comment七、点赞点踩表:UpAndDown八、文章标签表:Tag2Article九、轮播图表Swiper(拓展)十、日志表:Log(拓展)十一、创建BBS表模型表设计十二、改配置文件......
  • 黑群晖忘记登录密码如何找回修改
    一、问题简述大家都知道,白群晖上有RESET按钮,如果忘记密码,只要按住四秒钟直到哔声响将会重设管理者密码,我们很多人装的是黑群晖,根本没有reset键,如果你也没有设置找回邮箱,那忘记密码怎么办?这里我分享一种解决办法,说说原理:修改/etc/shadow文件,此文件也是linux系统上保存账户密码文......
  • TestCase--网站邮箱密码登录模块
    设计测试用例如下:组件相对大小和位置有序、协调、整齐每组组件的字体、风格保持一致输入密码时,密码显示不能是明文如果该窗口可以移动,那么组件随之移动,并且彼此间的相对位置保持不变如果该窗口可以移动,那么不能移动到一个移不回来的位置随着字符输入,邮箱地址和密码域文本......
  • BBS数据库表结构设计
    BBS数据库表结构设计在我们分析完一个项目的需求之后,我们着手开发项目所需要做的第一件事就是设计数据库的表结构及其字段。一般来说,设计一个数据库的表结构一般要注意以下三点:第一,把项目的需求转化为一个个数据库中的表第二,探寻表与表之间的关联关系第三,牢记以下原则:......
  • 网络基础 登录对接CAS-跨域导致的一个意想不到的Bug
    登录对接CAS-跨域导致的一个意想不到的Bug背景描述业务需求是平台登录,接入Cas验证问题描述平台登录页,点击登录方式,跳转Cas登录页,提交登录请求,结果发现,又返回平台登录页;再次点击登录方式,登录成功,跳转到目标页面。问题排查排查方向-浏览器兼容性问题这个问题,开发人员在其......
  • 模拟登录
    使用C#的HttpWebRequest模拟登陆网站-程序员大本营(pianshen.com)C#模拟网站用户登录-五好青年,勇往直前-博客园(cnblogs.com)HTTPAnalyzer(实时分析HTTP/HTTPS数据流)-挨踢人啊-博客园(cnblogs.com) ......