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

wechat xuhss 659℃ 0评论

优化

登录优化

先改一个之前的bug

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

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

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

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

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

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

版本号优化

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

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

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

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

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

定义发布版本的配置

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

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

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

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

访问记录优化

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

创建数据库

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目录

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

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

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

两个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())

添加通用服务

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

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

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

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

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

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

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

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

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

错误处理记录的添加

创建错误拦截器

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

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

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

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 *

运行:

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

拦截器添加提示

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 %}

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

错误处理记录

拦截器添加拦截的处理

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

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

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

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

喜欢 (0)

您必须 登录 才能发表评论!