【django项目记录:django项目日志打印】

首先在项目根目录下写入一个日志格式的文件,mylog.py

import logging
import threading
import os
class CustomFormatter(logging.Formatter):
    def format(self, record):
        process_id = os.getpid()
        thread_id = threading.get_ident()
        record.process_id = process_id
        record.thread_id = thread_id
        return super().format(record)

def d_log(name):

    # 创建日志记录器
    logger = logging.getLogger(name)

    # 配置日志记录器
    logger.setLevel(logging.INFO)

    # 创建文件处理程序
    file_handler = logging.FileHandler('./record.log',encoding='utf-8')
    file_handler.setLevel(logging.INFO)

    # 创建控制台处理程序
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)

    # 创建日志格式器
    formatter = CustomFormatter('%(asctime)s [%(levelname)s][%(name)s][%(process_id)s:%(thread_id)s]:%(message)s')

    # 将格式器添加到处理程序
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    # 将处理程序添加到日志记录器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    return logger

直接在需要的地方使用就行了,比如在登录的view.py文件中使用

# from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
import json
import time
from .models import *
from django.contrib.auth.hashers import make_password, check_password
from edusys.mylog import d_log
logger = d_log(__name__)

class LoginCheck(APIView):
    def post(self, request, *args, **kwargs):
        if request.method == "POST":
            try:
                data = json.loads(request.body.decode("utf-8"))
                token = data["token"]
                q_phone = data["phone"]
                q_pwd = data["pwd"]
                user_info, c_role = (
                    (Student.objects.filter(phone=q_phone), "student")
                    if Student.objects.filter(phone=q_phone)
                    else (Teacher.objects.filter(phone=q_phone), "teacher")
                )
                logger.info("获取登录信息:用户信息'{}'--角色'{}'".format(user_info,c_role))
                if user_info:
                    u_phone = user_info[0].phone
                    u_pwd = user_info[0].pwd if user_info[0].pwd else u_phone[-6:]
                    logger.info("已获取信息,查看密码:{}-{}".format(u_pwd,float(token)))
                    if (
                        u_phone == q_phone
                        and check_password(u_pwd, q_pwd)
                        and float(token) > time.time()
                    ):
                        res_josn = {
                            "msg": "当前状态:已登录",
                            "res": {
                                "login_status": True,
                                "token": time.time() + 60 * 60 * 24 * 7,
                                "role": c_role,
                            },
                        }
                        return Response(res_josn)
                    else:
                        logger.info("用户登录信息失效")
                        res_josn = {
                            "msg": "当前状态:账户密码错误或token失效",
                            "res": {"login_status": False, "token": 0},
                        }
                        return Response(res_josn)

                else:
                    logger.error("当前用户不存在:{}".format(q_phone))
                    res_josn = {
                        "msg": "当前状态:账户不存在",
                        "res": {"login_status": False, "token": 0},
                    }
                    return Response(res_josn)

            except json.JSONDecodeError as err:
                logger.error("数据问题:{}".format(err))
                res_josn = {
                    "msg": "当前数据有问题",
                    "res": {
                        "login_status": False,
                        "token": time.time() - 60 * 60 * 24 * 7,
                    },
                }


class ChangePassword(APIView):
    def put(self, request, *args, **kwargs):
        if request.method == "PUT":
            data = json.loads(request.body.decode("utf-8"))
            q_phone = data["phone"]
            q_role = data["role"]
            q_new_pwd = data["new_pwd"]
            logger.info("change pwd body is :{}".format(data))
            if q_role == "student":
                reset_user = Student.objects.filter(phone=q_phone).first()
                reset_user.pwd = q_new_pwd
                reset_user.save()
            else:
                reset_user = Teacher.objects.filter(phone=q_phone).first()
                reset_user.pwd = q_new_pwd
                reset_user.save()
            res_josn = {
                "msg": "{}:新密码设置完成".format(q_role),
                "res": {
                    "login_status": False,
                    "token": time.time() + 60 * 60 * 24 * 7,
                },
            }
            logger.info("修改密码成功:{}".format(q_phone))
            return Response(res_josn)


class Login(APIView):
    def post(self, request, *args, **kwargs):
        if request.method == "POST":
            data = json.loads(request.body.decode("utf-8"))
            q_phone = data["phone"]
            q_pwd = data["pwd"]
            wx_user = {}
            logger.info("微信登录data是:{}".format(data))
            if Student.objects.filter(phone=q_phone):
                wx_user_info = Student.objects.filter(phone=q_phone)[0]
                wx_user["w_role"] = "student"
                wx_user["u_pwd"] = wx_user_info.pwd
                wx_user["u_phone"] = wx_user_info.phone
                wx_user["u_name"] = wx_user_info.name
                wx_user["u_sex"] = wx_user_info.get_sex_display()
                wx_user["u_birthday"] = wx_user_info.birthday
                wx_user["u_school"] = wx_user_info.school
            elif Teacher.objects.filter(phone=q_phone):
                wx_user_info = Teacher.objects.filter(phone=q_phone)[0]
                wx_user["w_role"] = wx_user_info.role if wx_user_info.role else "SK"
                wx_user["u_pwd"] = wx_user_info.pwd
                wx_user["u_phone"] = wx_user_info.phone
                wx_user["u_name"] = wx_user_info.name
                wx_user["u_sex"] = wx_user_info.get_sex_display()
                wx_user["u_birthday"] = wx_user_info.birthday
                wx_user["u_school"] = wx_user_info.school
            else:
                logger.info("手机号不存在:{}".format(q_phone))
                res_josn = {
                    "msg": "手机号有误,有问题请联系学校老师",
                    "res": {
                        "login_status": False,
                        "token": time.time() + 60 * 60 * 24 * 7,
                    },
                }
                return Response(res_josn)
            u_pwd = wx_user["u_pwd"] if wx_user["u_pwd"] else wx_user["u_phone"][-6:]
            if check_password(u_pwd, make_password(q_pwd)):
                logger.info("登录成功")
                res_josn = {
                    "msg": "登录成功",
                    "res": {
                        "login_status": True,
                        "token": time.time() + 60 * 60 * 24 * 7,
                        "w_role": wx_user["w_role"],
                        "pwd": make_password(u_pwd),
                        "phone": q_phone,
                        "u_name": wx_user["u_name"],
                        "sex": wx_user["u_sex"],
                        "birthday": wx_user["u_birthday"],
                        "school": wx_user["u_school"],
                    },
                }
                return Response(res_josn)
            else:
                logger.info("登录失败")
                res_josn = {
                    "msg": "手机号/密码错误,有问题联系学校老师",
                    "res": {
                        "login_status": False,
                        "token": time.time() + 60 * 60 * 24 * 7,
                        "w_role": wx_user["w_role"],
                    },
                }
                return Response(res_josn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走走又停停,人生路上皆风景

不同的你我,不同的风景,祝幸福

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值