本项目要求实现用户注册、登录、修改密码和注销等功能。这里把每个用户的用户名和密码保存成键值对的形式,利用 JSON模块进行操作。
创建一个空的 JSON 文件,用来存储用户信息。
编写注册函数,接收用户输入的用户名和密码,将其以键值对的形式保存到 JSON 文件中。
编写登录函数,接收用户输入的用户名和密码,从 JSON 文件中查找对应的键值对,判断登录是否成功。
编写修改密码函数,接收用户输入的用户名和旧密码,检查其是否正确,若正确则将其对应的键值对中的密码修改为新密码。
编写注销函数,接收用户输入的用户名,从 JSON 文件中删除对应的键值对。
下面是一个简单的实现代码
import json
# JSON 文件路径
JSON_FILE = 'users.json'
# 注册函数
def register():
# 获取用户名和密码
username = input('请输入用户名:')
password = input('请输入密码:')
# 读取 JSON 文件
with open(JSON_FILE, 'r') as f:
users = json.load(f)
# 判断用户名是否已存在
if username in users:
print('用户名已存在')
else:
# 添加新用户
users[username] = password
# 写入 JSON 文件
with open(JSON_FILE, 'w') as f:
json.dump(users, f)
print('注册成功')
# 登录函数
def login():
# 获取用户名和密码
username = input('请输入用户名:')
password = input('请输入密码:')
# 读取 JSON 文件
with open(JSON_FILE, 'r') as f:
users = json.load(f)
# 判断用户名和密码是否正确
if username in users and users[username] == password:
print('登录成功')
else:
print('用户名或密码错误')
# 修改密码函数
def change_password():
# 获取用户名和旧密码
username = input('请输入用户名:')
old_password = input('请输入旧密码:')
# 读取 JSON 文件
with open(JSON_FILE, 'r') as f:
users = json.load(f)
# 判断用户名和密码是否正确
if username in users and users[username] == old_password:
# 获取新密码
new_password = input('请输入新密码:')
# 修改密码
users[username] = new_password
# 写入 JSON 文件
with open(JSON_FILE, 'w') as f:
json.dump(users, f)
print('密码修改成功')
else:
print('用户名或密码错误')
# 注销函数
def logout():
# 获取用户名
username = input('请输入用户名:')
# 读取 JSON 文件
with open(JSON_FILE, 'r') as f:
users = json.load(f)
# 判断用户名是否存在
if username in users:
# 删除用户
del users[username]
# 写入 JSON 文件
with open(JSON_FILE, 'w') as f:
json.dump(users, f)
print('注销成功')
else:
print('用户名不存在')
使用时,可以根据用户输入的选项调用相应的函数:
while True:
print('请选择操作:')
print('1. 注册')
print('2. 登录')
print('3. 修改密码')
print('4. 注销')
print('5. 退出')
choice = input()
if choice == '1':
register()
elif choice == '2':
login()
elif choice == '3':
change_password()
elif choice == '4':
logout()
elif choice == '5':
break
else:
print('无效选项')
注意,这里没有对 JSON 文件进行加密或者其他安全处理,实际应用中需要考虑更多的安全性问题。
一、在做接口测试传参的时候,我们往往需要定义一个字典,含有key和value的值,如下:
data={
"gameId": "2",
"issueType": "5",
"operatorId": "87"
}
然后请求的时候,会把data赋值给post请求,然而这样是错误的,data的数据类型为dict,接口请求的数据类型为字符串,只不过是json格式的字符串,但是本质是字符串是不会改变的,故需要通过json.dunps(data)转化成json格式的字符串,然后传递给post请求
二、在接口请求后返回值的时候,往往看到后面加一个“.json()”,为什么呢,如图:
import requests,json
data={
"gameId": "2",
"issueType": "5",
"operatorId": "87"
}
# print(type(data))
header={'Content-Type': 'application/json'}
url='http://10.12.103.12:8889/v1/game/queryGameIssue'
re= requests.post(url=url,data=json.dumps(data),headers=header).json()
print(type(re)) #<class 'dict'>
发现在返回值后加“.json()”后,返回的数据类型变成了dict,这样就方便我们按照字典的操作去拿数据,如果不加“.json()”的话,返回值为:<class ‘requests.models.Response’>
三、如何拿到响应头里的cookie和其他信息呢
接口测试中,接口返回的cookie一般为cookiejar类,管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。实际工作中一般通过如下方式把响应的cookie转化成cookie的字符串:
cookies = requests.get(url).cookies
cookie = requests.utils.dict_from_cookiejar(cookies)
此时我们可以将cookie写入json文件,供后续接口使用