每日一题.PYTHON编写简单登录接口?
每日一题.PYTHON编写简单登录接口?
满满李 发表于2年前
每日一题.PYTHON编写简单登录接口?
  • 发表于 2年前
  • 阅读 79
  • 收藏 2
  • 点赞 1
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

原文数据:

user_db.txt


root:root_admin

admin:admin_root

lock_db.txt

admin

具体要求:

1.输入用户名密码

2.认证成功后显示欢迎消息

3.输错三次后锁定账户

文件结构:

代码流程:

代码实现:

main.py

# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# OsChina: http://my.oschina.net/pydevops/
# Purpose:
#
"""
import sys
import linecache


def main():
    """Main function."""

    user_db = 'user_db.txt'
    lock_db = 'lock_db.txt'

    retry_count = 0
    # 判断三次输入的账户名是不是同一个用户,如果是并且不存在锁定文件中则锁定
    lock_db_set = set()
    while retry_count < 3:
        login_name = raw_input('please input login_user: ').strip()
        if len(login_name) == 0:
            continue
        lock_db_cache = linecache.getlines(lock_db)
        if ''.join([login_name, '\n']) in lock_db_cache:
            print 'Found Errors: your accound is limited login, try again later!'
            break

        lock_db_set.add(login_name)

        user_db_cache = linecache.getlines(user_db)
        login_pass = raw_input('please input login_pass: ').strip()
        if len(login_pass) == 0:
            continue
        if ''.join([login_name, ':', login_pass, '\n']) in user_db_cache:
            print 'Found Notice: welcome to login!'
            break
        else:
            print 'Found Errors: user name or pass wrong!'

        retry_count += 1
        # 防止程序运行中文件被篡改
        linecache.updatecache(user_db)
        linecache.updatecache(lock_db)
    else:
        # 判断三次输入的是否是同一个用户名
        if len(lock_db_set) == 1:
            print 'Found Notice: your accound is locked, contract admin unlock!'
            # 加入缓存,此时不需加\n换行,下次读取会自动添加
            lock_db_cache.append(login_name)
            with file(lock_db, 'w+b') as whandle:
                whandle.writelines(lock_db_cache)

if __name__ == '__main__':
    main()
共有 人打赏支持
粉丝 21
博文 156
码字总数 101605
×
满满李
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: