python 二维码制作、反爬虫、用户注册信息、登陆账号、验证信息、更改账号密码、注销账号密码、多层嵌套、多层循环

目标函数
实现1:可多个用户注册账号以及设置密码,每个账号不能重复,密码可重复,可重复登陆账号以及退出登陆
实现2:用户可更改账号密码,或者注销账号,此举需要先登陆验证,否则无法更改密码
实现3:反爬虫,在每个按钮中设置不等的时间间歇。在与用户互动时及时提醒操作对象
实现4:登陆成功之后的任务为:用户输入文本或网址,制作专属二维码
特点1:多层嵌套,多层循环,多分支结构
特点2:运用简单语法,大致模拟了用户软件的账号生命周期,以及功能实现
提醒:本文及代码均为原创,仅为博主学习阶段自主练习,若使用请标注来源,欢迎批评指正!

##提醒:运行该代码前需先安装qrcode库、numpy库、time库。可在cmd环境中,通过 语句   `:\> pip install <拟安装库名>` 实现。
##代码实现如下:
import qrcode       ##引用实现二维码的制作
import numpy as np  ##数据库检验值相等
import time as tm   ##设置休眠时间
def mmia():
    coded_dict = dict()   ##定义空字典,储存用户的账号和密码
    time_suer = True
    while np.equal(time_suer,True):
        choice_user = input("注册账号输入A,登陆已有账号输入B,更改账号密码输入C,注销账号输入D:")
        if choice_user == "A":  
            while True:
                user_first = input("注册—输入学号:")
                if user_first not in  coded_dict.keys() :       ##检验注册账号名是否已被注册
                    coded_lock = eval(input("注册—请设置数字密码:"))
                    coded_lock1 = eval(input("注册—请确认密码:"))
                    if coded_lock ==  coded_lock1 :
                        coded_dict[user_first] = coded_lock  ##将账号和密码设置为键值对
                        print("密码设置成功,可登录")
                        break
                    else:
                        print("两次输入不一致,3秒后请重新设置")
                        tm.sleep(3)     ##休眠时间
                else:
                    print("该学号已被注册,请重新输入")
    
        elif choice_user == "B":
            time_tre = True
            while np.equal(time_tre ,True):  
                user_second = input("登陆—请输入学号,返回首页输入stop:")
                if user_second == "stop":
                    break
                coded_lock2 = eval(input("登陆—请输入密码:"))   
                if coded_dict[user_second] == coded_lock2 :    ##登陆时,验证输入的密码与注册时的密码是否一致
                    print("登陆成功")
                    two_dimen = input("输入文字或URL,退出登陆输入exitm:")   ##输入扫码二维码后,呈现的内容,若为文本则显示文本,若为链接则跳转到相应网页
                    if two_dimen  == "exitm":
                        break  
                    else:
                        img =qrcode.make(two_dimen)    ##制作二维码图片
                        img.save=r"C:\Users\AdamCY\Desktop\wenjian\python-st"   #保存图片至本地目录,设定路径
                        img.show()         ##图片保存到本地后,自动显示图片 
                else:
                    print("账号或密码输入有误,2秒后请重新输入")
                    tm.sleep(2)  ##同上,设置休眠时间,防止爬虫
            
        elif choice_user == "C":
            time_fou = True
            while np.equal(time_fou,True):
                coded_change = input("更改—输入学号:")
                coded_alter = eval(input("更改—输入原密码:"))
                if coded_dict[coded_change] == coded_alter:  ##验证用户真实身份,输入信息与注册时信息是否一致
                    print("用户验证成功")
                    coded_new = eval(input("更改—输入新密码:"))
                    coded_neww = eval(input("更改—确认新密码:"))
                    if coded_new == coded_neww:   ##新密码输入无误时,则准备更改密码
                        coded_dict[coded_change] = coded_new   ##修改键值对,键对应的值
                        print("密码更改成功,返回重新登陆")
                        break
                    else:
                        print("更改失败:两次密码输入不一致")
                        
                else:
                    print("账号或密码输入错误,请重新输入")
                    
        elif choice_user == "D":
            time_fiv = True
            while np.equal(time_fiv,True):
                log_miss = input("注销—输入学号,退出输入loss:")
                if log_miss == "loss":
                    break
                if log_miss not in coded_dict.keys():   ##验证账户名是否输入正确
                    print("该账号暂未注册,3秒后返回首页")
                    tm.sleep(3)
                    break
                log_deoed = eval(input("注销—输入密码:"))
                if coded_dict[log_miss] == log_deoed:   ##验证身份,是否是正确账号密码
                    print("身份验证成功")
                    rest_rest = input("是否注销—输入:是/否")  ##再次确认用户是否注销账号
                    if rest_rest == "是":
                        coded_dict.pop(log_miss)   ##删除键值对。即删除用户信息
                        print("注销成功")
                    elif rest_rest == "否":
                        print("成功取消注册")
                    else:
                        print("无效输入,重新输入")
                    
                else:
                    print("身份验证失败")    
         
        else:
            print("选择有误,请重新输入")   ##用户输入为非ABCD四个选项时的返回信息

    

【注册账号】
先选择按钮,当非“ABCD”四个按钮时,则要求用户重新选择正确按钮。初次设置账户名,代码中以学号为例子,也可以设置为中英文字符等,因为此处统一以字符串形式保留,并要求设置数字密码(此处要求使用数字密码是因为以便后续验证密码是否一致,并使用eval()函数,其会去掉字符串两旁的引号,数值型保留),当两次密码不一致时,则提示并要求重新注册账户密码。若再次登陆时,账户名与之前重复则会提醒用户该用户名已被注册。账号与密码以键值对的形式存储在字典中,可实现后续登陆、更改、注销步骤时的引用。也由此可见字典的重要性。
引用idle脚本定义的函数,实现用户注册
【登陆账号】
用户登陆账号时,可选择返回上一个菜单,即输入“stop”,可以返回到“ABCD”四个按钮界面。在其提示下,要求用户输入已经注册的的账号,并验证登陆输入密码与注册密码是否一致,若不一致,设置休眠时间,防止爬虫,在要求用户重新输入登陆信息或者返回到按钮界面。若用户登陆时输入的账户名(学号)未注册即非字典内容,则返回提醒该账号并未注册。在用户一次性输入中,可能输入学号,可能输入“stop”,则要求设置条件语句进行辨别。
登陆已经注册过的账号

【功能实现】
当用户成功登陆账号后,通过输入文本或者要访问的链接,自动生成二维码,并将其保存到本地(需自行设定保存路径,若复制粘贴代码块,会直接报错)。自动保存后,代码继续运行,会自动在电脑上显示保存的二维码。此时,可通过移动端扫码二维码显示内容,或者访问链接对象网页面。二维码的制作,此处运用的是qrcode库,MyQR库也可以实现二维码的制作。二维码的制作中,还可以设置颜色、大小、背景图(静态图、动图)等等。
功能实现二维码的制作

制作二维码的单独语句块

import qrcode   
two_dimen = input("输入文字或URL,退出登陆输入exitm:")
img =qrcode.make(two_dimen)    ##制作二维码图片
img.save=r"C:\Users\AdamCY\Desktop\wenjian\python-st"   #保存图片至本地目录,设定路径
img.show()         ##图片保存到本地后,自动显示图片 

或者使用MyQR库

from MyQR import myqr
import byte
from byte import *
myqr.run(words = "true or false,this is a question",
         version=9,save_name="python_1.jpg",
         save_dir = 'C:/Users/AdamCY/Desktop/wenjian/python-st/')
##图片保存到本地后,没有自动显示,需要在设定路径中寻找二维码

【修改账号密码】
当用户选择C按钮时,可进行更改密码。其原理依旧是对于字典的应用,即为修改键值,在修改之前,需要验证账户名与密码,再进行新密码的双次输入确认。确认之后,可重新登陆,使用新密码,显示登陆成功,再实现程序功能。更改密码

【注销密码】
注销密码即删除键值对。登陆—验证—确认删除—删除成功。该过程只不过是以上各个步骤的循环便不再赘述。
注销账户信息

限于个人水平以及时间,还有许多不足之处:
后续再更新1:待实现某账号密码输入错误次数到达界限后固定时间段内限制登陆,但期间可以登陆其他账号。这其中又会涉及多层嵌套
后续再更新2:待实现二维码的循环制作,以及相应格式参数,如:二维码的颜色、规格、背景图等
后续再更新3:待实现将其打包成独立文件,可脱离python环境在windows系统下独立运行
后续再更新4:待实现找回密码以及密保功能

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高山莫衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值