首先在项目根目录下写入一个日志格式的文件,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 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)