Python flask实战订餐系统微信小程序-29登录/版本号/访问记录/错误处理记录功能添加及优化

B站配套视频教程观看

优化

登录优化

先改一个之前的bug

删除的用户,添加不能登录的判断

删除的用户,当删除时,自动退出登录。

版本号优化

每次更改js文件都需要再次刷一遍。更改版本号,浏览器会自动再次加载

可以通过时间戳定义版本号:

这样就不需要手动清理JavaScript文件

定义发布版本的配置

只需要上线时,修改这个版本号就可以 如此 就可以兼容我们的开发模式和生产模式对版本号的要求。

访问记录优化

记录管理员操作的步骤,防范一些不被允许的操作的记录

创建数据库

use food_db
CREATE TABLE `app_access_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` bigint(20) NOT NULL DEFAULT '0' COMMENT 'uid',
  `referer_url` varchar(255) NOT NULL DEFAULT '' COMMENT '当前访问的refer',
  `target_url` varchar(255) NOT NULL DEFAULT '' COMMENT '访问的url',
  `query_params` text NOT NULL COMMENT 'get和post参数',
  `ua` varchar(255) NOT NULL DEFAULT '' COMMENT '访问ua',
  `ip` varchar(32) NOT NULL DEFAULT '' COMMENT '访问ip',
  `note` varchar(1000) NOT NULL DEFAULT '' COMMENT 'json格式备注字段',
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户访问记录表';


CREATE TABLE `app_error_log` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `referer_url` varchar(255) NOT NULL DEFAULT '' COMMENT '当前访问的refer',
  `target_url` varchar(255) NOT NULL DEFAULT '' COMMENT '访问的url',
  `query_params` text NOT NULL COMMENT 'get和post参数',
  `content` longtext NOT NULL COMMENT '日志内容',
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COMMENT='app错误日表';

创建数据库model

创建log目录

flask-sqlacodegen "mysql://root:123456@127.0.0.1/food_db" --tables app_access_log --outfile "order/common/models/log/AppAccessLog.py"  --flask

flask-sqlacodegen "mysql://root:123456@127.0.0.1/food_db" --tables app_error_log --outfile "order/common/models/log/AppErrorLog.py"  --flask

两个model都需要修改引用

# coding: utf-8
from application import db



class AppAccessLog(db.Model):
    __tablename__ = 'app_access_log'

    id = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.BigInteger, nullable=False, index=True, server_default=db.FetchedValue(), info='uid')
    referer_url = db.Column(db.String(255), nullable=False, server_default=db.FetchedValue(), info='?????refer')
    target_url = db.Column(db.String(255), nullable=False, server_default=db.FetchedValue(), info='???url')
    query_params = db.Column(db.Text, nullable=False, info='get?post??')
    ua = db.Column(db.String(255), nullable=False, server_default=db.FetchedValue(), info='??ua')
    ip = db.Column(db.String(32), nullable=False, server_default=db.FetchedValue(), info='??ip')
    note = db.Column(db.String(1000), nullable=False, server_default=db.FetchedValue(), info='json??????')
    created_time = db.Column(db.DateTime, nullable=False, server_default=db.FetchedValue())

添加通用服务

from  flask import request,g
from  application import app,db
import json
from common.libs.Helper import getCurrentDate
from common.models.log.AppAccessLog import AppAccessLog


class LogService():
    @staticmethod
    def addAccessLog():
        target = AppAccessLog()
        target.target_url = request.url
        target.referer_url = request.referrer
        target.ip = request.remote_addr
        target.query_params = json.dumps(request.values.to_dict())
        if 'current_user' in g and g.current_user is not None:
            target.uid = g.current_user.uid
        target.ua = request.headers.get("User-Agent")
        target.created_time = getCurrentDate()

        db.session.add(target)
        db.session.commit()

        return True

    @staticmethod
    def addErrorLog():
        pass

为了使得每一个人访问的记录都可以查看到,

在拦截器里添加拦截处理:

可以看到数据就已经添加进去了

这里的展示就留给大家自己去实现 之前的课程中我们也讲过类似的案例

错误处理记录的添加

创建错误拦截器

当我们访问到一个错误的地址

创建错误拦截器,拦截器拦截错误页面请求:

ErrorInterceptors.py

from application import app
from common.libs.Helper import ops_render

@app.errorhandler(404)
def error_404(e):
    return ops_render('error/error.html')

www.py引入拦截器:

from web.interceptors.AuthInterceptors import *
from web.interceptors.ErrorInterceptors import *

运行:

拦截器添加提示

from application import app
from common.libs.Helper import ops_render

@app.errorhandler(404)
def error_404(e):
    return ops_render('error/error.html', {'status':404, 'msg':'很抱歉!您访问的页面不存在'})

错误页面error.html动态显示msg

{% extends "common/layout_user.html" %}
{% block content %}
    <div class="row">
        <div class="panel panel-default gray-bg text-center" style="min-height: 600px;line-height: 600px;">
            <div class="panel-body gray-bg" style="font-size: 18px;">
                <p>{{ msg }},<a href="{{ buildUrl('/') }}">返回首页</a></p>
            </div>
        </div>
    </div>
{% endblock %}

错误处理记录

拦截器添加拦截的处理

from application import app
from common.libs.Helper import ops_render
from common.libs.LogService import LogService

@app.errorhandler(404)
def error_404(e):
    LogService.addErrorLog(str(e))
    return ops_render('error/error.html', {'status':404, 'msg':'很抱歉!您访问的页面不存在'})

LogService.py添加错误处理方法

from  flask import request,g
from  application import app,db
import json
from common.libs.Helper import getCurrentDate
from common.models.log.AppAccessLog import AppAccessLog
from common.models.log.AppErrorLog import AppErrorLog


class LogService():
    @staticmethod
    def addAccessLog():
        target = AppAccessLog()
        target.target_url = request.url
        target.referer_url = request.referrer
        target.ip = request.remote_addr
        target.query_params = json.dumps(request.values.to_dict())
        if 'current_user' in g and g.current_user is not None:
            target.uid = g.current_user.uid
        target.ua = request.headers.get("User-Agent")
        target.created_time = getCurrentDate()

        db.session.add(target)
        db.session.commit()

        return True

    @staticmethod
    def addErrorLog(content):
        target = AppErrorLog()
        target.target_url = request.url
        target.referer_url = request.referrer
        target.query_params = json.dumps(request.values.to_dict())
        target.content = content

        target.created_time = getCurrentDate()

        db.session.add(target)
        db.session.commit()

        return True

访问错误页面就可以看到有错误的数据添加到数据库里面了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虚坏叔叔

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值