文章目录
显示
优化
登录优化
先改一个之前的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
访问错误页面就可以看到有错误的数据添加到数据库里面了
转载请注明:xuhss » Python flask实战订餐系统微信小程序-29登录/版本号/访问记录/错误处理记录功能添加及优化