Python 学习记录

1.日志logging模块使用

import logging
from logging.config import dictConfig

#保证日志文件夹存在
dictConfig({
    "version": 1,
    "formatters": {
       "simple": {
           "format": "[%(asctime)s] [%(pathname)s:%(lineno)d] [%(levelname)s] %(message)s"
       }
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "level": "DEBUG",
            "formatter": "simple",
            "stream": "ext://sys.stdout"
        },
        "info_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "INFO",
            "formatter": "simple",
            "filename": "log/info.log",
            "maxBytes": 1024*1024*10,
            "backupCount": 5,
            "encoding": "utf8"
        },
        "error_file_handler": {
            "class": "logging.handlers.RotatingFileHandler",
            "level": "ERROR",
            "formatter": "simple",
            "filename": "log/error.log",
            "maxBytes": 1024*1024*10,
            "backupCount": 5,
            "encoding": "utf8"
        }
    },
    "root": {
        "level": 'INFO',
        "handlers": ["console", "info_file_handler", "error_file_handler"]
    }
})

if __name__ == '__main__':
    print('PyCharm')

    logging.info("hello info")
    logging.warning("hello warning")
    logging.error("hello error")

需要再当前目录下创建log文件夹,运行程序就会再文件夹下生产两个log文件

2. Web 应用框架Flask模块使用

get请求

from flask import Flask
from flask import request
from python_logging import dictConfig


# Flask框架设置
# static_folder是用来指代存放static文件的目录
# static_url_path是我们再url里输入地址用来指向static文件的
app = Flask(__name__, static_folder='', static_url_path='')

@app.route('/analyse', methods=['get'])
def analyse():
    data = request.args.get("text")
    print(data)
    app.logger.info(data)
    return data

if __name__=='__main__':
    app.run()

测试方法:

#输入 直接用网页输入: http://127.0.0.1:5000/analyse?text="2020年3月"
#输出 "2020年3月"

post请求

from flask import Flask, jsonify, request
from flask_socketio import SocketIO
from python_logging import dictConfig
import json

app = Flask(__name__, static_folder='', static_url_path='')

@app.route('/analyse', methods=['post'])
def analyse():
    #application/x-www-form-urlencoded
    print("content_type:", request.headers.get("content_type"))
    data = request.form.to_dict()
    print('form:', data)
    text = data.get("text")
    print(text)
    app.logger.info(text)

    #application/json
    print("content_type:", request.headers.get("content_type"))
    data = request.get_data().decode("utf-8")
    print("data : ", data)
    json_data = json.dumps(data, ensure_ascii=False) #参数 ensure_ascii=False 禁用ascii编码,按utf-8编码
    print("json_data : ", json_data)
    j_data = json.loads(data)
    text = j_data.get("text")
    print("text: ", text)

    for item in j_data.get("num"):
        print("first: ", item.get("first"))
        print("second: ", item.get("second"))

    app.logger.info(text)
    return jsonify({'code': 200})


if __name__=='__main__':
    app.run(host="127.0.0.1", port=5000)

body的两种模式,接收判别type,解读方式不同。

postman模拟发送数据:

body为application/x-www-form-urlencoded模式时:

 body为application/json模式时:

 打印信息:以 body为application/json模式时为例

在应用中Flask直接打印会干扰日志查看。所以换种方式,使用 flask_socketio模块

post程序修改为

from flask import Flask, jsonify, request
from flask_socketio import SocketIO
from python_logging import dictConfig
import json

app = Flask(__name__, static_folder='', static_url_path='')

@app.route('/analyse', methods=['post'])
def analyse():
    #application/x-www-form-urlencoded
    print("content_type:", request.headers.get("content_type"))
    data = request.form.to_dict()
    print('form:', data)
    text = data.get("text")
    print(text)
    app.logger.info(text)

    #application/json
    print("content_type:", request.headers.get("content_type"))
    data = request.get_data().decode("utf-8")
    print("data : ", data)
    json_data = json.dumps(data, ensure_ascii=False) #参数 ensure_ascii=False 禁用ascii编码,按utf-8编码
    print("json_data : ", json_data)
    j_data = json.loads(data)
    text = j_data.get("text")
    print("text: ", text)

    for item in j_data.get("num"):
        print("first: ", item.get("first"))
        print("second: ", item.get("second"))

    app.logger.info(text)
    return jsonify({'code': 200})


if __name__=='__main__':
    socket_io = SocketIO(app, cors_allowed_origins='*', async_mode='eventlet', engineio_logger=False)
    socket_io.run(app, host="127.0.0.1", port=5000)

打印信息: 同样以body为application/json模式时为例

 这样看着简洁很多,不会有那么多干扰项

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值