'nowedit'

This commit is contained in:
shilixia 2019-11-04 16:20:01 +08:00
commit 136e76775a
7 changed files with 119 additions and 11 deletions

View File

@ -39,7 +39,7 @@
<div class="icon">
<i class="fa fa-eye"></i>
</div>
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
<a href="{% url 'groups_observe' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
@ -54,7 +54,7 @@
<div class="icon">
<i class="fa fa-life-ring"></i>
</div>
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
<a href="{% url 'groups_miss' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
@ -69,7 +69,7 @@
<div class="icon">
<i class="fa fa-graduation-cap"></i>
</div>
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
<a href="{% url 'groups_train' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
@ -84,7 +84,7 @@
<div class="icon">
<i class="fa fa-industry"></i>
</div>
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
<a href="{% url 'groups_company' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<div class="col-lg-2 col-xs-6">

View File

@ -21,6 +21,7 @@ def check_login(func): # 自定义登录验证装饰器
return redirect('/groups/login')
return warpper
def login(request):
# 不允许重复登录
if request.session.get('is_login', None):

View File

@ -10,7 +10,7 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""
import os
import os,time
import psycopg2.extensions
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
@ -146,5 +146,82 @@ CELERY_ENABLE_UTC=True
##配置session
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_COOKIE_AGE = 1800
SESSION_SAVE_EVERY_REQUEST = True
#日志配置
# 创建日志的路径
LOG_PATH = os.path.join(BASE_DIR, 'log')
# 如果地址不存在则自动创建log文件夹
if not os.path.join(LOG_PATH):
os.mkdir(LOG_PATH)
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 日志格式
'standard': {
'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'},
'simple': { # 简单格式
'format': '%(levelname)s %(message)s'
},
},
# 过滤
'filters': {
},
# 定义具体处理日志的方式
'handlers': {
# 默认记录所有日志
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_PATH, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
},
# 输出错误日志
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_PATH, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份数
'formatter': 'standard', # 输出格式
'encoding': 'utf-8', # 设置默认编码
},
# 控制台输出
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
# 输出info日志
'info': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_PATH, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8', # 设置默认编码
},
},
# 配置用哪几种 handlers 来处理日志
'loggers': {
# 类型 为 django 处理所有类型的日志, 默认调用
'django': {
'handlers': ['default', 'console'],
'level': 'INFO',
'propagate': False
},
# log 调用时需要当作参数传入
'log': {
'handlers': ['error', 'info', 'console', 'default'],
'level': 'INFO',
'propagate': True
},
}
}

View File

@ -101,15 +101,15 @@ canvas{
}
.login{z-index: 2;position:absolute;width: 350px;border-radius: 5px;height: 500px;box-shadow: 0px 0px 5px #333333;background:white;top: 50%;left: 50%;margin-top: -250px;margin-left: -175px;transition: all 1s;-moz-transition: all 1s; /* Firefox 4 */-webkit-transition: all 1s; /* Safari 和 Chrome */-o-transition: all 1s; /* Opera */}
.login-top{font-size: 24px;margin-top: 100px;padding-left: 40px;box-sizing: border-box;color: #333333;margin-bottom: 50px;font-family:"微软雅黑";font-weight:bold;color:dodgerblue}
.login-top{font-size: 24px;margin-top: 100px;text-align: center;;box-sizing: border-box;color: #333333;margin-bottom: 50px;font-family:"微软雅黑";font-weight:bold;color:dodgerblue}
.login-center{width: 100%;box-sizing: border-box;padding: 0 40px;margin-bottom: 30px;}
.login-center-img{width: 20px;height: 20px;float: left;margin-top: 5px;}
.login-center-img>img{width: 100%;}
.login-center-input{float: left;width: 230px;margin-left: 15px;height: 30px;position: relative;}
.login-center-input{float: left;width: 80%;margin-left: 15px;height: 30px;position: relative;}
.login-center-input input{z-index: 2;transition: all 0.5s;padding-left: 10px;color: #333333;width: 100%;height: 30px;border: 0;border-bottom: 1px solid #cccccc;border-top: 1px solid #ffffff;border-left: 1px solid #ffffff;border-right: 1px solid #ffffff;box-sizing: border-box;outline: none;position: relative;}
.login-center-input input:focus{border: 1px solid dodgerblue;}
.login-center-input-text{background: white;padding: 0 5px;position: absolute;z-index: 0;opacity: 0;height: 20px;top: 50%;margin-top: -10px;font-size: 14px;left: 5px;color: dodgerblue;line-height: 20px;transition: all 0.5s;-moz-transition: all 0.5s; /* Firefox 4 */-webkit-transition: all 0.5s; /* Safari 和 Chrome */-o-transition: all 0.5s; /* Opera */}
.login-center-input input:focus~.login-center-input-text{top: 0;z-index: 3;opacity: 1;margin-top: -15px;}
.login.active{-webkit-animation: login-small 0.8s ; animation: login-small 0.8s ;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}
.login-button{cursor: pointer;width: 250px;text-align: center;height: 40px;line-height: 40px;background-color: dodgerblue;border-radius: 5px;margin: 0 auto;margin-top: 50px;color: white;font-size: 18px}
.login-button{cursor: pointer;width: 80%;text-align: center;height: 40px;line-height: 40px;background-color: dodgerblue;margin: 0 auto;margin-top: 50px;color: white;font-size: 18px}

View File

@ -526,7 +526,7 @@ function jsonSort(jsonObj) {
}
return str.substr(0, str.length - 1)
}
//map定时显示,每分钟请求一次
//map定时显示,每分钟请求一次,如果存在map
function update() {
if ($('#mapshowinput').length) {
source.clear()
@ -571,4 +571,15 @@ function update() {
})
}
}
var t1 = window.setInterval(update, 1000 * 60)
function checksession(){
$.get('api/check_session',function(res){
if(res.code==1){
}else{
$.messager.alert('','长时间未操作,请重新登陆!','warning',function(){
window.location.reload(true)
});
}
})
}
var t1 = window.setInterval(update, 1000 * 60)
var t2 = window.setInterval(checksession,1000*60*31)

View File

@ -155,6 +155,7 @@ urlpatterns = [
path('api/obscount',views.observepic),
path('api/riskas',views.apiriskas),
path('api/trainfg',views.trainfg),
path('api/check_session',views.check_session),
#path('api/rights/group/<int:groupid>',views.rightsgroup),
path('api/main',views.mainapi),

View File

@ -26,6 +26,9 @@ import jwt
import decimal
from . import forms
from .models import CompanyInfo
from django.contrib.sessions.models import Session
import logging
logger = logging.getLogger('log')
#分页功能
def fenye(req):
@ -272,6 +275,11 @@ def check_login(func):
# return JsonResponse({"code": 401, "message": "please login!"})
return warpper
def check_session(req):
if req.session.get('userid',None):
return JsonResponse({"code":1})
else:
return JsonResponse({"code":0})
#存储文件
def upfile(req):
username = User.objects.get(userid=req.session['userid']).username
@ -295,13 +303,22 @@ def login(req):
if user:
#比较成功跳转index
req.session['userid'] = user[0].userid
# req.session.set_expiry(60*30)
#req.session.set_expiry(10)
#登录之后获取获取最新的session_key
# session_key = req.session.session_key
#删除非当前用户session_key的记录
# for session in Session.objects.filter(~Q(session_key=session_key), expire_date__gte=datetime.now()):
# data = session.get_decoded()
# if data.get('userid', None) == user[0].userid:
# session.delete()
logger.info('method: %s user: %s 登陆' % (req.method,user[0].userid))
return redirect('index')
else:
return render(req,'login.html',{'msg':'用户名或密码错误!'})
else:
return render(req,'login.html')
def index(req):
if not req.session.get('userid', None):
return redirect('login')
@ -320,6 +337,7 @@ def logout(req):
#del req.session['username']
# if "userid" in req.session:
# del req.session['userid']
logger.info('method: %s user: %s 登出' % (req.method,req.session['userid']))
req.session.flush()
#req.session.flush()
#req.session.delete("session_key")