练习题
1.logging模块有几个日志级别?
logging的日志可以分为 debug(), info(), warning(), error() and critical()5个级别
debug()调试模式,日志很详细
info()提示
warning()有潜在的问题
error()出问题了
critical()严重问题
2.请配置logging模块,使其在屏幕和文件里同时打印以下格式的日志
2017-10-18 15:56:26,613 - access - ERROR - account [1234] too many login attempts
import logging
# 1.生成logger对象
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)# 设置全局
# 2.生成handler对象
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)# 设置局部
fh = logging.FileHandler("example.log")
# 2.1把 handler对象绑定到logger
logger.addHandler(ch)
logger.addHandler(fh)
# 3.生成formatter对象
# 3.1把formatter对象绑定handler对象
file_formatter = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(threadName)s[%(thread)d]%(message)s")
console_formatter= logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(threadName)s[%(thread)d]%(message)s")
ch.setFormatter(file_formatter)
fh.setFormatter(console_formatter)
logging.debug("too many login attempts")
logging.info("too many login attempts")
logging.error("too many login attempts")
logging.critical("too many login attempts")
3.json、pickle、shelve三个区别是什么?
JSON:
优点:跨语言、体积小
缺点:只支持int\str\list\tuple\dict
Pickle:
优点:专为python设计,支持Python所有的数据类型
缺点:只能在Python中使用,存储数据占空间大
json和pickle的模块只允许dump和load一次,而shelve可以支持多次。
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
4.json的作用是什么?
json,用于字符串和Python数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
(A)简化用JavaScript定义对象的方式
(B)也能用在AJAX中,做为数据载体之一
1.JSON应用场景
web客户端和服务器通过AJAX(HTTP REQUEST)进行数据交换,而JSON是AJAX中最常用的数据格式。
2.JSON简介和语法
(1)概念:JSON:JavaScript对象表示法,是一种完全独立与语言的文本格式
(2)语法:数据由逗号分隔,{}保存对象,【】保存数组
3.JSON语法检测工具:BE JSON,JSON.cn
4.JSON与JavaScript对象的区别
1.JSON是从JavaScript对象中演变出来的,是JavaScript的一个子集
2.表面上,可以看作使用“”引起的是JSON
5.JSON在HTTP请求中的作用
1.HTTP协议采用了请求/响应模型,即客户端发出请求,服务器端给予相应
2.传输过程包括message-header和message-body两部分
3.message-body是传输的具体信息
4.message-header,用来设置HTTP的一些信息
6.HTTP Header信息
1.HTTP Header是HTTP请求和响应的核心
2.包含许多有关的客户端环境和请求正文的有用信息
---------------------
作者:ZhzetFor
来源:CSDN
原文:https://blog.csdn.net/qq_32631151/article/details/79085527
5.subprocess执行命令方法有几种?
三种执行命令的方法
subprocess.run(*popenargs, input=None, timeout=None, check=False, **kwargs) #官方推荐
subprocess.call(*popenargs, timeout=None, **kwargs) #跟上面实现的内容差不多,另一种写法
subprocess.Popen() #上面各种方法的底层封装
6.为什么要设计好目录结构?
我们设计一个层次清晰的目录结构,就是为了达到以下两点:
1.可读性高:不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本在哪,测试目录在哪儿。这个歌=好处是,随着时间的推移,代码、配置的规模增加,项目结构不会混乱,仍然能够阻止良好。
2.可维护性高:定义好组织规则后,维护者就能很明确地知道,新增的哪个文件和代码应该放在什么目录之下。这个好处是,随着时间的推移,代码、配置的规模增加,项目结构不会混乱,仍然能够阻止良好。
7.打印出命令行的第一个参数。例如:
python argument.py luffy
打印出 luffy
8.代码如下:
'''
Linux当前目录/usr/local/nginx/html/
文件名:index.html
'''
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(index.html)))
print(BASE_DIR)
打印的内容是什么?
os.path.dirname和os.path.abspath含义是什么?
9.通过configparser模块完成以下功能
文件名my.cnf
[DEFAULT]
[client]
port = 3306
socket = /data/mysql_3306/mysql.sock
[mysqld]
explicit_defaults_for_timestamp = true
port = 3306
socket = /data/mysql_3306/mysql.sock
back_log = 80
basedir = /usr/local/mysql
tmpdir = /tmp
datadir = /data/mysql_3306
default-time-zone = '+8:00'
修改时区 default-time-zone = '+8:00' 为 校准的全球时间 +00:00
删除 explicit_defaults_for_timestamp = true
为DEFAULT增加一条 character-set-server = utf8
import configparser
config = configparser.ConfigParser()# 一个对象
config.sections()
config.read("conf.ini")
config['mysqld']['default-time-zone'] ='+00:00' # 修改
config.remove_option("mysqld","explicit_defaults_for_timestamp")# 删除
config["DEFAULT"]["character-set-server"]="utf-8" #增加一条
config.write(open("conf.ini","w"))# 写回文件
10.写一个6位随机验证码程序(使用random模块),要求验证码中至少包含一个数字、一个小写字母、一个大写字母.
import random
import string
d = random.sample(string.ascii_letters+string.digits,3)
d.append(random.choice(string.ascii_lowercase))
d.append(random.choice(string.ascii_uppercase))
d.append(random.choice(string.digits))
random.shuffle(d)
print("".join(d))
11.利用正则表达式提取到 luffycity.com ,内容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>luffycity.com</title>
</head>
<body>
</body>
</html>
12.写一个用户登录验证程序,文件如下
1234.json
{"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
用户名为json文件名,密码为 password。
判断是否过期,与expire_date进行对比。
登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
答:已经做出,略,用到json,os,time模块
13.把第12题三次验证的密码进行hashlib加密处理。即:json文件保存为md5的值,然后用md5的值进行验证。
14.最近luffy买了个tesla,通过转账的形式,并且支付了5%的手续费,tesla价格为75万。文件为json,请用程序实现该转账行为。
需求如下:
目录结构为
.
├── account
│ ├── luffy.json
│ └── tesla.json
└── bin
└── start.py
当执行start.py时,出现交互窗口
------- Luffy Bank ---------
1. 账户信息
2. 转账
选择1 账户信息 显示luffy的当前账户余额。
选择2 转账 直接扣掉75万和利息费用并且tesla账户增加75万
15.对上题增加一个需求:提现。
目录结构如下
.
├── account
│ └── luffy.json
├── bin
│ └── start.py
└── core
└── withdraw.py
当执行start.py时,出现交互窗口
------- Luffy Bank ---------
1. 账户信息
2. 提现
选择1 账户信息 显示luffy的当前账户余额和信用额度。
选择2 提现 提现金额应小于等于信用额度,利息为5%,提现金额为用户自定义。
16.尝试把上一章的验证用户登陆的装饰器添加到提现和转账的功能上。
17.对第15题的用户转账、登录、提现操作均通过logging模块记录日志,日志文件位置如下
.
├── account
│ └── luffy.json
├── bin
│ └── start.py
└── core
| └── withdraw.py
└── logs
└── bank.log
网友评论