注册和登录python实现

一、构成

注册  ->   数据库(mysql)  -> 登录

注:

1.若不能用mysql,可以用excel创建一个.CSV文件,使用Python的文件操作进行调取

import hashlib
str_user_name = input("请输入账号:")
str_password = input("请输入密码:")
p = open("user_password.csv","a")
hash_password = hashlib.md5(password.encode(encoding="UTF-8")).hexdigest()
p.write("{},{},{}\n".format(user_name,password,hash_password))
p.close()

 2.若借鉴下面代码请安装并配置好mysql

二、代码实现

1.引用hashlib库对密码进行hash运算,pymysql库用于连接mysql数据库 

import hashlib
import pymysql

 2.注册模块:包括用户名操作和密码操作

def user_registration(): #注册
    """
    注册账户
    :return:
    """
    user_name=enter_user_name()
    if is_user_exist(user_name):
        password=enter_password()
        hash_password = hashlib.md5(password.encode(encoding="UTF-8")).hexdigest()
        insert_data((user_name,hash_password,"用户","申请中"))
    else:
        print("您输入账户已存在")

*输入账户:要求账户为10位并且前两位为小写字母,后8位位数字

def enter_user_name():
    """
    输入账户
    :return:格式正确的账户
    """
    while True:
        str_user_name = input("请输入账号:格式为双小写字母加8位数字")
        if len(str_user_name) == 10 and is_user_format(str_user_name):

            return str_user_name
        else:
            print("您的格式不正确,请重新输入10位账号")
            continue

*判断账户是否在数据库中,输出bool值 

def is_user_exist(user_name):
    """
    判断账户存在
    :param user_name:账户
    :return: bool
    """
    tuple_user=data_obtained(user_name)
    for item in tuple_user:
        if user_name == item[0]:
            return False
    return True
def is_user_format(str_user_name):
    """
    判断账户格式
    :param str_user_name: 账户 str
    :return: bool
    """
    for item in str_user_name[0:2]:
        if not is_small_letter(item):
            print("您的格式不正确,请重新输入")
            return False
    for item in str_user_name[2:]:
        if not is_number(item):
            print("您的格式不正确,请重新输入")
            return False
    return True

 

def is_number(number):
    """
        判断数字
        :letter: 字符
        :return: bool
        """
    try:
        if 0 <= eval(number) <= 9:
            return True
        return False
    except:
        print()
        return False

*输入密码操作,要求密码为强密码格式 

def enter_password():
    """
    输入密码
    :return: 强密码
    """
    while True:
        str_password = input("请输入密码:包含大小写字母,数字,特殊字符并大于等于6位")
        if len(str_password) >= 6:

            if is_str_format(str_password) ==4:
                return str_password
            else:
                print("您的密码强度不够,请重新输入")
                continue
        else:
            print("密码的长度不够,请重新输入")
            continue
def is_str_format(str_password):
    """
    判断密码字符格式
    :param str_password: 密码
    :return:
    """
    count_big_letter = count_small_letter = count_num = count_special_character = 0
    for item in str_password:
        if is_big_letter(item):
            count_big_letter = 1
        elif is_small_letter(item):
            count_small_letter = 1
        elif is_number(item):
            count_num = 1
        elif is_special_character(item):
            count_special_character = 1
        else:
            print("有非法字符,请重新输入")
            return False
    return count_big_letter+count_num+count_small_letter+count_special_character

def is_big_letter(big_letter):
    """
    判断大写字母
    :big_letter:字符
    :return: Bool
    """
    if "A"<=big_letter<="Z":
        return True
    return False
def is_small_letter(small_letter):
    """
        判断小写字母
        :big_letter:字符
        :return: Bool
        """
    if "a"<= small_letter <="z":
        return True
    return False
def is_special_character(special_character):
    """
        判断特殊字符
        :big_letter:字符
        :return: Bool
        """
    if ord(special_character)<48 or  58<ord(special_character)<65 or 91<ord(special_character)<97 or 123<ord(special_character)<128:
        return True
    return False

3.登录模块,(下面代码涉及到mysql的操作) 

*从数据库中调取数据

def data_obtained(id):
    """
    调取数据
    :return:
    """
    conn=pymysql.connect(host="localhost",user="root",passwd="123456")
    conn.select_db("user")
    curcor = conn.cursor()
    sql = "select * from user where id=%s ;"
    curcor.execute(sql,(id))
    user = curcor.fetchall()
    return user

 *往数据库中插入数据

def insert_data(data):
    conn = pymysql.connect(host="localhost", user="root", passwd="123456")
    conn.select_db("user")
    curcor = conn.cursor()
    sql = "insert into user value (%s,%s,%s,%s)"
    curcor.execute(sql,(data[0],data[1],data[2],data[3]))
    print("操作成功")
    curcor.close()
    conn.commit()
    conn.close()

*修改密码 

def update_passport(id,passport):
    """
    更新密码
    :param id:
    :param passport:
    :return:
    """
    conn = pymysql.connect(host="localhost", user="root", passwd="123456")
    conn.select_db("user")
    curcor = conn.cursor()
    sql = "update user set passport =%s where id=%s;"
    curcor.execute(sql,(passport,id))
    print("操作成功")
    curcor.close()
    conn.commit()
    conn.close()

*修改账户状态 

def update_conditions(id,conditions="正常"):
    """
    更新账号状态
    :param id:账号
    :param conditions:状态,正常,
    :return:
    """
    conn = pymysql.connect(host="localhost", user="root", passwd="123456")
    conn.select_db("user")
    curcor = conn.cursor()
    sql = "update user set conditions =%s where id=%s;"
    curcor.execute(sql,(conditions,id))
    print("操作成功")
    curcor.close()
    conn.commit()
    conn.close()
def register():#登录
    """
    登录
    :return: bool
    """
    count = 0
    while True:
        user_name=enter_user_name()
        password=enter_password()
        if count != 3:
            if is_user_password_equality(user_name,password) and is_user_conditions(user_name):
                print("登录成功")
                if data_obtained(user_name)[0][-2] =="管理员":
                    if administrator_mean() == False:
                        return False
                else:
                    mean()
            else:
                count +=1
                continue
        else:
            update_conditions(user_name, conditions="锁定")
            print("输入超过3次,账号已锁定,请联系管理员解锁!")
def is_user_password_equality(user_name,password):
    """
    判断账户密码相对应
    :user_name:账户
    :return: bool
    """
    tuple_user=data_obtained(user_name)[0]
    hash_password = hashlib.md5(password.encode(encoding="UTF-8")).hexdigest()
    if user_name == tuple_user[0] and hash_password == tuple_user[1]:
        return True
    print("您输入账户不存在或密码错误,请重新输入")
    return False
def is_user_conditions(id):
    """
    判断用户状态
    :param id: 用户名
    :return: bool
    """
    tuple_user = data_obtained(id)[0]
    if tuple_user[-1] =="正常":
        return True
    print("你的用户处于申请中,请联系管理员")
    return False
def delete_data(user_name):
    conn = pymysql.connect(host="localhost", user="root", passwd="123456")
    conn.select_db("user")
    curcor = conn.cursor()
    sql = "delete from user where user_name=%s;"
    curcor.execute(sql,(user_name))
    curcor.close()
    conn.commit()
    conn.close()
def data_all_obtained():
    """
    调取所有数据
    :return:
    """
    conn=pymysql.connect(host="localhost",user="root",passwd="123456")
    conn.select_db("user")
    curcor = conn.cursor()
    sql = "select * from user  ;"
    curcor.execute(sql)
    user = curcor.fetchall()
    print("{:<12}\t{:<70}\t{:<5}\t{:<5}".format("账户","密码","性质","状态"))
    for items in user:
        print("{:<12}\t{:<70}\t{:<5}\t{:<5}".format(items[0],items[1],items[2],items[3]))
def data_falue_conditions():
    """
    调取状态异常数据
    :return:
    """
    conn=pymysql.connect(host="localhost",user="root",passwd="123456")
    conn.select_db("user")
    curcor = conn.cursor()
    sql = "select * from user where conditions <>'正常';"
    curcor.execute(sql)
    user = curcor.fetchall()
    print("{:<12}\t{:<5}".format("账户","状态"))
    for items in user:
        print("{:<12}\t{:<5}".format(items[0],items[-1]))

def register_mean():
    """
    菜单

    """

    while True:
        try:
            int_choice = int(input("""
            **********菜单**********
            1.注册
            2.登录
            3.退出
            """))
        except:
            print("指令错误,请重新输入")
            continue
        if int_choice == 1:
            user_registration()
            continue
        elif int_choice ==2:
            register()
            continue
        elif int_choice ==3:
            print("程序结束,谢谢使用")
            return False
def administrator_mean():
    print("欢迎进入墨非墨所创信息系统,该模块为管理员模块,欢迎使用")
    while True:
        try:
            int_choice = int(input("""
            **********菜单**********
                    1.查看用户
                    2.修改密码
                    3.用户确认
                    4.删除用户
                    5.退出
            **********墨非墨**********
            """))
        except:
            print("指令错误,请重新输入")
            continue

        if int_choice == 1:
            data_all_obtained()
            continue
        elif int_choice == 2:
            id=input("账户")
            passport = input("修改的密码")
            update_passport(id,passport)
            continue
        elif int_choice == 3:
            data_falue_conditions()
            id = input("账户")
            update_conditions(id)
            continue
        elif int_choice == 4:
            id = input("请输入删除账户")
            delete_data(id)
            print("此功能尚在开发,代码已完成")
            continue
        elif int_choice == 5:
            print("返回上级菜单")
            return False
        else:
            print("指令错误,请重新输入")
            continue

def mean():
    print("欢迎进入墨非墨所创信息系统,该模块待完善,敬请期待")
    return False

register_mean()

*************************************************************************************************************

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨非墨Lg

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

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

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

打赏作者

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

抵扣说明:

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

余额充值