Day1作业1:登陆接口(加入日志、注册功能)
流程图如下:

最先考虑使用python中的list,以能取到user_list中的用户信息,但中途发现没有比较好的方法截取取密码,还是新手的缘故,最终选择了使用dict,以方便截取用户名以及相应的密码。
user_list格式如下:
xxx:xxx
xxx:xxx
xxx:xxx
user_lock格式如下:
xxx
xxx
xxx
Code:
#!/usr/bin/env python
# encoding: utf-8
# Auther:ccorz Mail:ccniubi@163.com import time,getpass,os
# 将输入用户赋值于user_name变量
# print('=============',os.popen('pwd').read())
user_name=input('请输入您的用户名:')
# 打开文件user_list,user_lock,赋予读写权限
user_list=open('user_list','r+')
user_lock=open('user_lock','r+')
#设置日志文件,open如果,用追加模式
log_file=open('login.log','a+')
# 设置一个退出标识符
break_flag=0
time_now=time.strftime('%Y-%m-%d %H:%M:%S') #遍历user_lock被锁用户文件
for line in user_lock:
# 设置被锁用户的变量,strip()将字符串两边的空格符去掉
lock_name=line.strip()
#判断输入用户是否与遍历用户相同
if user_name==lock_name:
print('您的用户已被锁定...请尝试其他的用户')
log_file.write('\n%s:被锁定用户%s尝试登陆!'%(time_now,user_name))
#修改退出标识符的值,以便区分既在user_list,又在user_lock的用户
break_flag=1
#退出循环
break
#将空字典赋予变量account
account={}
for line in user_list:
#遍历user_list文件,将一行的字符串去掉空格,并按":"分割为key value,并将key value添加入dict中
account[line.strip().split(':')[0]]=line.strip().split(':')[1]
# print(account) # break_flag==0用来区分在user_list,user_lock中同时存在的用户,
# 如果没有此标识符,上面遍历锁用户文件也会执行以下程序
if user_name in account and break_flag==0:
#设置计数器,初始值为0
count=0
#循环3次
while count < 3:
password=input('请输入%s的密码:'%user_name)
# 校验密码
if password==account[user_name]:
print('欢迎登陆系统.......')
log_file.write('\n%s,user %s had login.'%(time_now,user_name))
# 退出循环
break
else:
# 密码错误,将计数器+1
count+=1
print('%s的密码错误,请重新输入,您还有%s次机会'% (user_name,3-count))
# 循环超过3次,执行下面命令
else:
print('用户%s已经被锁定,请联系管理员!'%user_name)
# 将密码输入超过3此的用户名添加进user_lock,写入日志文件
user_lock.write('\n%s'%user_name)
log_file.write('\n%s:%s is locked!'%(time.strftime('%Y-%m-%d %H:%M:%S'),user_name))
if user_name not in account:
# \033[1;44;33m....\033[0m 高亮显示,并提醒用户无此用户,是否用此用户名注册
regis_or_quit=input('''\033[1;44;33m没有用户%s,是否注册此用户?\033[0m
\033[1;44;33m输入"y"继续注册,输入"q"退出:\033[0m'''%user_name)
#将输入的字符串转化为小写并与y或者q匹配
if regis_or_quit.lower()=='q':
print('Bye!!!!!!!!')
elif regis_or_quit.lower()=='y':
#直接使用user_name注册,第一次输入密码密码,如果不想显示明文密码可用getpass.getpass('...')
regis_pass=input('请输入%s的密码:'%user_name)
#允许两次确认密码,设置循环2次,故也无需设置计数器
for i in range(2):
#确认注册密码,防止用户忘记密码
regis_pass_again=input('请确认注册用户%s的密码:'%user_name)
# 校验注册密码
if regis_pass_again==regis_pass:
# 校验密码成功,将user_name regis_pass两个变量的值写入user_list文件,并提醒用户注册成功
user_list.write('\n%s:%s'%(user_name,regis_pass))
log_file.write('\n%s:%s注册成功'%(time_now,user_name))
print('用户%s注册成功.....'%user_name)
# 退出循环
break
#校验注册密码失败,进入下一次循环
else:
print('\033[1;33;44m密码与上次不一致.......\033[0m')
#密码确认超过两次,注册失败
else:
print('用户%s注册失败'%user_name)
#输入不为y或者q,其他字符串或者回车 空格时,程序显示退出
else:
print('输入不符合规范,程序已退出.....')
#将open的两个账户文件关闭,也可用with open() as xxx,open() as xxxx
user_list.close()
user_lock.close()
log_file.close()
Day1作业1:登陆接口(加入日志、注册功能)的更多相关文章
- day1作业:登录接口
作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 思路: (1)用户输入用户名: (2)去锁定文件中验证用户名是否锁定: (3)去当前用户验证用户是否存在: ...
- python 作业 编写登陆接口
# -*- coding:utf-8 -*-import os,sysfor i in range(3):#进行3次循环 blacklist = open(r"C:\Users\Pc4\De ...
- Android后台数据接口交互实现注册功能
首先,在ecplise里面新建一个叫做TestServices的web工程.在WebContent--WEB-INF--libs文件夹下导入两个jar包:mysql-connector-java-6. ...
- day1作业:编写登陆接口
作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 思路:要求是编写登陆接口,那么要有一个存放用户信息的模块:三次后锁定,要有一个存放锁定用户信息的模块:我们知 ...
- day1作业一:编写登陆接口
作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 Readme: (1)提示用户输入用户名: (2)用户名验证,验证是否已经锁定: (3)是否锁定:已锁定告诉 ...
- Python学习之编写登陆接口(Day1,作业一)
作业一:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定(下次登陆还是锁定) 知识点:while循环,for循环,文件操作,if判断,列表操作 思路: 1.登陆,三次登陆失败,锁定 ...
- day1作业--登录接口
作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 知识: 1.循环的使用: 2.continue,break在循环中中断的作用: 3.文件的写入,读取: 4.各基础知 ...
- 不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离
注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件 do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...
- day1作业登录接口总结
作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 上面作业,用了几种思路来解决问题:但是本质上其实都是一样的:核心都是对文件的操作,文件的增删改查:并且这些操 ...
- 老男孩Day1作业(一):编写登录接口
需求:编写登陆接口1. 用户输入帐号密码进行登陆2. 用户信息保存在文件内3. 用户密码输入错误三次后锁定用户 1)编写思路 编写思路参考下面GitHub链接中的流程图 https://github. ...
随机推荐
- java常用日期类型转换
import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import j ...
- to_excel
Signature: df.to_excel( ['excel_writer', "sheet_name='Sheet1'", "na_rep=''", 'fl ...
- 基于Python3+Requests的贴吧签到助手
因为总是忘记签到,所以尝试写了一个签到脚本,因为使用的是Python3,所以没法使用Urllib2,于是选择了Requests,事实证明,Requests比Urllib2好用.整体思路比较简单,就是模 ...
- IDEA的安装和使用
IDEA的特色功能 IDEA所提倡的是智能编码,是减少程序员的工作,IDEA的特色功能有以下22点 [1] : ● 智能的选取 在很多时候我们要选取某个方法,或某个循环或想一步一步从一个变量到整个类 ...
- 第4课.vi编辑器
1.vi编辑器的配置 cd /etc/vim cp vimrc ~/.vimrc cd ~ gedit .vimrc 在.vimrc中加入如下内容: "关闭兼容功能 set nocompat ...
- zabbix sender
在zabbix中自定义一个虚拟主机,自定义key值,一般运用的是自动发现规则,给清单规则中配置上宏变量,通过py脚本调动zabbixsender模块,给这个主机,host发送一组包含键和宏变量的值,这 ...
- HTML5自定义属性操作
一.自定义属性(html5标准)data-属性名称="属性值" 自定义属性的名称驼峰式命名规则需要用-隔开 自定义属性名称如果连在一起写,大写会自动转为小写 data-user=& ...
- leetcode解题报告(26):Add Binary
描述 Given two binary strings, return their sum (also a binary string). For example, a = "11" ...
- 使用pytesseract进行图像识别
引言 对于简单验证码及一些图像的识别,我们需要使用pytesseract及相应的Tesseract引擎,它是开源的OCR引擎.帮助我们做一些简单的图像识别 当然为了更好将图片识别,对一些像素比较低的图 ...
- 23、CacheManager原理剖析与源码分析
一.图解 二.源码分析 ###org.apache.spark.rdd/RDD.scalal ###入口 final def iterator(split: Partition, context: T ...