需求,增加一个在机器码管理页面增加一个激活时间,激活时间这个字段在机器码数据库表kn_machine中authorized_time字段,激活时间指激活机器码的时间,点击激活时,将这个激活时间保存在数据库kn_machine中authorized_time字段,并在机器码管理界面显示出激活时间,提供machine.html的代码<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>机器码管理</title>
<link rel="stylesheet" href="/static/css/main.css" type="text/css">
<link rel="stylesheet" href="/static/css/machine.css" type="text/css">
<script src="/static/js/jquery-1.11.3.js"></script>
<script src="/static/js/tools.js?v={% now 'U' %}"></script>
<script src="/static/js/machine.js?v={% now 'U' %}"></script>
</head>
<body style="width: 990px">
<div id="container">
{% include 'top.html' %}
{% include 'left.html' %}
<div id="right">
<div id="top_func">
<form action="/machine_search/" method="get" style="display: inline-block">
<input type="text" name="input_search" placeholder="角色/机器码" id="input_search">
<input type="submit" value="搜索" class="btn" id="btn_search">
</form>
</div>
<div class="div_table">
<table id="item_table">
<tr id="table_th">
<td class="col0">序号</td>
<td class="col1">申请单位</td>
<td class="col3">机器码</td>
<td class="col4">授权时间</td>
<td class="col11">操作</td>
</tr>
<!-- 数据由 JS 动态插入 -->
</table>
</div>
<div id="paging">
共有 <span id="total_num">0</span> 条记录,
当前第 <span id="local_page">1</span>/ <span id="total_page">1</span> 页
<div>
<input type="button" value="首页" class="btn" id="btn_firstpage">
<input type="button" value="上一页" class="btn" id="btn_lastpage">
<input type="button" value="下一页" class="btn" id="btn_nextpage">
<input type="button" value="尾页" class="btn" id="btn_endpage">
转到第 <input type="text" id="targetpage"> 页
<input type="button" value="跳转" class="btn" id="btn_targetpage">
</div>
</div>
</div>
</div>
<script>
$(function () {
get_page(1); // 页面加载时自动请求第一页
});
</script>
</body>
</html>
和models.py的代码from django.db import models
from django.utils import timezone
class Groups(models.Model):
group_name = models.CharField(verbose_name='角色', max_length=10)
group_level = models.IntegerField(verbose_name='级别')
def __str__(self):
return self.group_name
class Meta:
db_table = "KN_Groups"
verbose_name = "职位"
verbose_name_plural = verbose_name
class Users(models.Model):
group = models.ForeignKey(Groups, on_delete=models.CASCADE, verbose_name='角色')
user_account = models.CharField(verbose_name='用户名', max_length=20)
user_password = models.CharField(verbose_name='密码', max_length=100)
user_name = models.CharField(verbose_name='姓名', max_length=10, default='')
user_age = models.IntegerField(verbose_name='年龄', default=20)
register_date = models.DateTimeField(verbose_name='注册时间', auto_now_add=True) # 固定写法
last_login_date = models.DateTimeField(verbose_name='最后登录', null=True, blank=True)
is_active = models.BooleanField(verbose_name='激活状态', default=True)
def __str__(self):
return self.user_name
class Meta:
db_table = "KN_Users"
verbose_name = "用户"
verbose_name_plural = verbose_name
class UsersMac(models.Model):
user = models.ForeignKey(Users, on_delete=models.CASCADE, verbose_name='用户')
mac = models.CharField(verbose_name='mac地址', max_length=40)
def __str__(self):
return self.user.user_name # 修正为 user.user_name
class Meta:
db_table = "KN_UsersMac"
verbose_name = "用户Mac"
verbose_name_plural = verbose_name
# 新增 Machine 模型(原缺失)
class Machine(models.Model):
group = models.ForeignKey(Groups, on_delete=models.CASCADE, verbose_name='申请单位')
mac = models.CharField(verbose_name='机器码', max_length=40, unique=True)
is_active = models.BooleanField(verbose_name='激活状态', default=False)
authorized_time = models.DateTimeField(verbose_name='授权时间', null=True, blank=True)
def __str__(self):
return f"{self.mac} ({'已激活' if self.is_active else '未激活'})"
class Meta:
db_table = "kn_machine"
verbose_name = "机器码"
verbose_name_plural = verbose_name
ordering = ['-authorized_time']
def activate(self):
self.is_active = True
self.authorized_time = timezone.now()
self.save()
和views.py关于机器码的代码from django.shortcuts import render, redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.http import HttpResponse, JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.db.models import Q, DurationField, ExpressionWrapper, F, Max
import os.path
from datetime import datetime
from .models import *
from log.views import opelog_add
from log.views import visitlog_add
from door.models import Company
from door.models import CompanyEmployee
from door.models import Department
from door.models import DepartmentEmployee
from door.models import DepartmentManager
from door.models import Machine
from django.utils import timezone
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.http import JsonResponse
from .models import Machine
def login(request):
if request.method == 'GET':
request.session.flush()
return render(request, 'login.html')
else:
# 接收uphone 和 upwd 并验证
errMsg = ""
user_account = request.POST['user_account']
if not user_account:
errAccMsg = "账号或密码错误"
return render(request, 'login.html', locals())
user_password = request.POST['user_password']
if not user_password:
errPwdMsg = "账号或密码错误"
return render(request, 'login.html', locals())
# print(user_account, user_password)
# users = Users.objects.filter(Q(user_account=user_account) & Q(is_delete=False)).first()
user = Users.objects.filter(user_account=user_account).first()
if user:
# return HttpResponse("欢迎:" + users[0].user_name)
if user.is_active == 0:
errAccMsg = "账号或密码错误"
return render(request, 'login.html', locals())
if user_password == user.user_password:
reset_user_session(request)
request.session['user_account'] = user_account
request.session['user_level'] = user.group.group_level
request.session['user_group_name'] = user.group.group_name
_company_employee = CompanyEmployee.objects.filter(employee__id=user.id).first()
if not _company_employee:
errAccMsg = "账号或密码错误"
return render(request, 'login.html', locals())
request.session['company_id'] = _company_employee.company.id
user.last_login_date = datetime.now()
user.save()
_ip = request.META.get("REMOTE_ADDR")
visitlog_add(user_account, 'Web网页', _ip)
return render(request, 'user.html', get_user_response(request))
else:
errPwdMsg = "账号或密码错误"
return render(request, 'login.html', locals())
else:
errAccMsg = "账号或密码错误"
return render(request, 'login.html', locals())
# 表格字段顺序,便于维护
def reset_user_session(request):
request.session['input_search'] = None
request.session['users_fieldorder'] = '00000'
request.session['users_fieldordernum'] = '0'
def login_out(request):
request.session.flush() # 清空session
# login_status = 0
# return render(request, 'backend/index.html', {'login_status': login_status, })
return redirect('../login/')
def get_full_uers(_users):
_list_user = []
for _user in _users:
user = {}
user['id'] = _user.id
user['user_account'] = _user.user_account
user['user_name'] = _user.user_name
_model_com_emp = CompanyEmployee.objects.filter(employee__id=_user.id).first()
if _model_com_emp:
user['company'] = _model_com_emp.company.name
else:
user['company'] = ''
_model_dep_emp = DepartmentEmployee.objects.filter(employee__id=_user.id).first()
if _model_dep_emp:
user['department'] = _model_dep_emp.department.name
else:
_model_dep_man = DepartmentManager.objects.filter(manager__id=_user.id).first()
if _model_dep_man:
user['department'] = _model_dep_man.department.name
else:
user['department'] = ''
user['group_name'] = _user.group.group_name
user['is_active'] = _user.is_active
_list_user.append(user)
return _list_user
def get_filter_uers(request, _users):
# _company_employee = CompanyEmployee.objects.filter(employee__id=_user.id).first()
_level = request.session.get('user_level')
if _level <= 4:
_filter_ce = CompanyEmployee.objects.filter(company__id=request.session.get('company_id'))
_list_filter_ids = []
for _model in _filter_ce:
_list_filter_ids.append(_model.employee.id)
user_list = _users.filter(Q(group__group_level__gt=_level) & Q(id__in=_list_filter_ids)).order_by(
"-id")
else:
# _department_manager = DepartmentManager.objects.filter(
# department__company__id=request.session.get('company_id')).first()
_account = request.session.get('user_account')
_model_dm = DepartmentManager.objects.filter(manager__user_account=_account).first()
if _model_dm:
_filter_users = DepartmentEmployee.objects.filter(department=_model_dm.department)
_list_filter_ids = []
for _model in _filter_users:
_list_filter_ids.append(_model.employee.id)
user_list = _users.filter(Q(group__group_level__gt=_level) & Q(id__in=_list_filter_ids)).order_by(
"-id")
else:
user_list = _users.filter(id=-1)
return user_list
def get_user_response(request):
# _page = request.POST['req_page']
_level = request.session.get('user_level')
# group_list = Groups.objects.all().order_by("id")
if _level == 1 or _level == 2:
group_list = Groups.objects.filter(group_level__gt=_level).exclude(id__in=[3, 4]).order_by("id")
else:
group_list = Groups.objects.filter(group_level__gt=_level).order_by("id")
# _user_account = request.session.get('user_account')
# _user = Users.objects.filter(user_account=_user_account).first()
_users = Users.objects.all()
user_list = get_filter_uers(request, _users)
paginator = Paginator(user_list, 15)
response = {}
response['groups'] = group_list
response['total_num'] = user_list.count()
response['total_page'] = paginator.num_pages
_users = paginator.page(1)
response['users'] = get_full_uers(_users)
companys = Company.objects.filter(is_delete=False)
response['companys'] = companys
response['local_page'] = 1
response['from_num'] = 0
response['user_level'] = _level
response['user_account'] = request.session.get('user_account')
return response
# 用户管理页面
def user(request):
request.session['input_search'] = ""
_account = request.session.get('user_account')
if not _account:
return HttpResponse("请登录")
reset_user_session(request)
return render(request, 'user.html', get_user_response(request))
def user_query_pwd(request):
_id = request.GET['id']
response = {}
_user = Users.objects.filter(id=_id).first()
if _user:
response['pwd'] = _user.user_password
response['result'] = 0
return JsonResponse(response)
def user_query_acount(request):
_user_acount = request.GET['user_acount']
response = {}
_user = Users.objects.filter(user_account=_user_acount).first()
if _user:
response['user_password'] = _user.user_password
response['result'] = 0
return JsonResponse(response)
# 用户列表分页
def users_page(request):
input_search = request.session.get('input_search')
_level = request.session.get('user_level')
if input_search:
user_list = Users.objects.filter(user_account__icontains=input_search)
else:
user_list = Users.objects.all()
user_list = get_filter_uers(request, user_list)
req_page = request.GET['req_page']
return JsonResponse(res_users_page(user_list, req_page))
def res_users_page(user_list, req_page):
paginator = Paginator(user_list, 15)
response = {}
response['total_num'] = user_list.count()
response['total_page'] = paginator.num_pages
response['local_page'] = req_page
try:
_users = paginator.page(req_page)
except PageNotAnInteger:
_users = paginator.page(1)
except EmptyPage:
_users = paginator.page(paginator.num_pages)
response['local_page'] = paginator.num_pages
response['users'] = get_full_uers(_users)
response['from_num'] = (int(response['local_page']) - 1) * 15
# response['users'] = json.loads(serializers.serialize("json", users))
# print(locals())
return response
# 添加用户
@csrf_exempt
def user_add(request):
request.session['input_search'] = ""
response = {}
_account = request.POST['account']
_user = Users.objects.filter(user_account=_account).first()
if _user:
response['result'] = 1
return JsonResponse(response)
_level = request.session.get('user_level')
if _level == 5:
_my_account = request.session.get('user_account')
_model_dm = DepartmentManager.objects.filter(manager__user_account=_my_account).first()
if not _model_dm:
response['result'] = 2
return JsonResponse(response)
user = Users()
user.user_account = request.POST['account']
user.user_name = request.POST['name']
user.user_password = request.POST['pwd']
group_id = request.POST['group']
group = Groups.objects.filter(id=group_id)[0]
# group = Groups.objects.get(id=group_id)
user.group = group
user.save()
_ce = CompanyEmployee()
# _company_id = request.POST['company']
_company_id = request.session.get('company_id')
_company = Company.objects.filter(id=_company_id)[0]
_ce.company = _company
_ce.employee = user
_ce.save()
if _level == 5:
_model_de = DepartmentEmployee()
_model_de.department = _model_dm.department
_model_de.employee = user
_model_de.save()
response['result'] = 0
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'), '添加账号_' + user.user_account)
return JsonResponse(response)
# 修改用户
@csrf_exempt
def user_update(request):
response = {}
# user = Users()
original_account = request.POST['original_account']
user_id = request.POST['id']
_user1 = Users.objects.filter(id=user_id).first()
if not _user1:
response['result'] = 2
return JsonResponse(response)
_account = request.POST['account']
_user2 = Users.objects.filter(user_account=_account)
if original_account != _account and _user2:
response['result'] = 1
return JsonResponse(response)
_user1.user_account = request.POST['account']
_user1.user_password = request.POST['pwd']
_user1.user_name = request.POST['name']
group_id = request.POST['group']
group = Groups.objects.filter(id=group_id)[0]
_user1.group = group
_user1.save()
# _ce = CompanyEmployee()
# _company_id = request.session.get('company_id')
# _company = Company.objects.filter(id=_company_id)[0]
# _ce.company = _company
# _ce.save()
response['result'] = 0
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
'修改账号_' + _user1.user_account)
return JsonResponse(response)
# 修改自身用户
@csrf_exempt
def user_updatepwd(request):
response = {}
# user = Users()
user_acount = request.POST['user_acount']
_user1 = Users.objects.filter(user_account=user_acount).first()
if not _user1:
response['result'] = 2
return JsonResponse(response)
_user1.user_password = request.POST['user_pwd']
_user1.save()
# _ce = CompanyEmployee()
# _company_id = request.session.get('company_id')
# _company = Company.objects.filter(id=_company_id)[0]
# _ce.company = _company
# _ce.save()
response['result'] = 0
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
'修改账号密码')
return JsonResponse(response)
# 模糊查询
def user_search(request):
user_acc_name = request.GET['input_search']
print(user_acc_name)
# print(type(user_acc_name))
# _str = urllib(user_acc_name)
# print(_str)
if not user_acc_name:
reset_user_session(request)
return render(request, 'user.html', get_user_response(request))
else:
request.session['input_search'] = user_acc_name
_level = request.session.get('user_level')
user_list = Users.objects.filter(user_account__icontains=user_acc_name)
user_list = get_filter_uers(request, user_list)
if _level == 1 or _level == 2:
group_list = Groups.objects.filter(group_level__gt=_level).exclude(id__in=[3, 4]).order_by("id")
else:
group_list = Groups.objects.filter(group_level__gt=_level).order_by("id")
# user_list = Users.objects.all().order_by("id")
paginator = Paginator(user_list, 15)
response = {}
response['groups'] = group_list
response['total_num'] = user_list.count()
response['total_page'] = paginator.num_pages
users = paginator.page(1)
response['users'] = users
response['local_page'] = 1
response['from_num'] = 0
response['user_level'] = _level
response['user_account'] = request.session.get('user_account')
# print(locals())
return render(request, 'user.html', response)
def user_active(request):
_id = request.GET['id']
response = {}
# print(del_id)
if not _id:
response['result'] = 1
return JsonResponse(response)
else:
_user = Users.objects.filter(id=_id).first()
if _user:
_user.is_active = 1 - _user.is_active
if _user.is_active:
_acitve_str = '启用账号'
response['result'] = 1
else:
_acitve_str = '禁用账号'
response['result'] = 0
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
_acitve_str + '_' + _user.user_account)
_user.save()
else:
response['result'] = 1
return JsonResponse(response)
return JsonResponse(response)
def user_delete(request):
del_id = request.GET['del_id']
response = {}
# print(del_id)
if not del_id:
response['result'] = 1
return JsonResponse(response)
else:
_model = Users.objects.filter(id=del_id)
if _model:
_delete_model = _model.first()
_delete_account = _delete_model.user_account
_model.delete()
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
' 删除账号' + '_' + _delete_account)
else:
response['result'] = 1
return JsonResponse(response)
response['result'] = 0
return JsonResponse(response)
def user_mac(request):
_account = request.session.get('user_account')
if not _account:
return HttpResponse("请登录")
user_mac_id = request.GET.get('mac_account_id')
_model_user = Users.objects.filter(id=user_mac_id).first()
request.session['mac_account'] = _model_user.user_account
return render(request, 'user_mac.html', get_user_mac_response(request))
def get_user_mac_response(request):
_mac_account = request.session.get('mac_account')
_data = UsersMac.objects.filter(user__user_account=_mac_account).order_by("-id")
paginator = Paginator(_data, 15)
response = {}
# response['doors'] = _doors
response['total_num'] = _data.count()
response['total_page'] = paginator.num_pages
_data = paginator.page(1)
response['models'] = _data
response['local_page'] = 1
response['from_num'] = 0
response['user_level'] = request.session.get('user_level')
response['user_account'] = request.session.get('user_account')
response['mac_account'] = request.session.get('mac_account')
return response
@csrf_exempt
def user_mac_add(request):
response = {}
_mac_account = request.session.get('mac_account')
_mac = request.POST['mac']
_model_users_mac = UsersMac()
_model_user = Users.objects.filter(user_account=_mac_account).first()
_model_users_mac.user = _model_user
_model_users_mac.mac = _mac
_model_users_mac.save()
response['result'] = 0
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
'为账号_' + _mac_account + ' 添加Mac授权_' + _mac)
return JsonResponse(response)
@csrf_exempt
def user_mac_update(request):
response = {}
# user = Users()
_update_id = request.POST['update_id']
_update_mac = request.POST['update_mac']
_model_users_mac = UsersMac.objects.filter(id=_update_id).first()
if not _model_users_mac:
response['result'] = 2
return JsonResponse(response)
_model_users_mac.mac = _update_mac
_model_users_mac.save()
response['result'] = 0
_mac_account = request.session.get('mac_account')
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
'为账号_' + _mac_account + ' 修改Mac授权')
return JsonResponse(response)
def users_mac_page(request):
_mac_account = request.session.get('mac_account')
_data = UsersMac.objects.filter(user__user_account=_mac_account).order_by("-id")
req_page = request.GET['req_page']
return JsonResponse(res_users_mac_page(_data, req_page))
def res_users_mac_page(_datas, req_page):
paginator = Paginator(_datas, 15)
response = {}
response['total_num'] = _datas.count()
response['total_page'] = paginator.num_pages
response['local_page'] = req_page
try:
models = paginator.page(req_page)
except PageNotAnInteger:
models = paginator.page(1)
except EmptyPage:
models = paginator.page(paginator.num_pages)
response['local_page'] = paginator.num_pages
list_data = []
for _model in models:
dic_data = {}
dic_data['mac_id'] = _model.id
dic_data['mac'] = _model.mac
list_data.append(dic_data)
response['models'] = list_data
response['from_num'] = (int(response['local_page']) - 1) * 15
return response
def user_mac_delete(request):
del_id = request.GET['del_id']
response = {}
# print(del_id)
if not del_id:
response['result'] = 1
return JsonResponse(response)
else:
_model = UsersMac.objects.filter(id=del_id)
if _model:
_delete_model = _model.first()
_model.delete()
_mac_account = request.session.get('mac_account')
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
'为账号_' + _mac_account + ' 解除Mac授权')
else:
response['result'] = 1
return JsonResponse(response)
response['result'] = 0
return JsonResponse(response)
def machine(request):
request.session['input_search'] = ""
_account = request.session.get('user_account')
if not _account:
return HttpResponse("请登录")
return render(request, 'machine.html', get_machine_response(request))
def get_machine_response(request):
# _model_company = Company.objects.filter(id=request.session.get('company_id')).first()
# _data = Machine.objects.filter(employee__company=_model_company).order_by("is_active")
# _data = Machine.objects.order_by("is_active", "employee__company")
_data = Machine.objects.order_by("is_active", "campany")
paginator = Paginator(_data, 15)
response = {}
# response['doors'] = _doors
response['total_num'] = _data.count()
response['total_page'] = paginator.num_pages
_data = paginator.page(1)
response['models'] = _data
response['local_page'] = 1
response['from_num'] = 0
response['user_level'] = request.session.get('user_level')
response['user_account'] = request.session.get('user_account')
# response['mac_account'] = request.session.get('mac_account')
return response
def machine_page(request):
input_search = request.session.get('input_search')
_model_company = Company.objects.filter(id=request.session.get('company_id')).first()
if input_search:
_data = Machine.objects.filter(
Q(employee__company__name__icontains=input_search) | Q(
employee__employee__user_account__icontains=input_search))
_data = _data.order_by("is_active")
else:
_data = Machine.objects.all().order_by("is_active", "campany")
req_page = request.GET['req_page']
return JsonResponse(res_machine_page(_data, req_page))
def res_machine_page(_datas, req_page):
paginator = Paginator(_datas, 15)
response = {}
response['total_num'] = _datas.count()
response['total_page'] = paginator.num_pages
response['local_page'] = req_page
try:
models = paginator.page(req_page)
except PageNotAnInteger:
models = paginator.page(1)
except EmptyPage:
models = paginator.page(paginator.num_pages)
response['local_page'] = paginator.num_pages
list_data = []
for _model in models:
dic_data = {}
dic_data['id'] = _model.id
dic_data['ip'] = _model.campany.name
# dic_data['account'] = _model.employee.employee.user_account
dic_data['mac'] = _model.mac
dic_data['is_active'] = _model.is_active
list_data.append(dic_data)
response['models'] = list_data
response['from_num'] = (int(response['local_page']) - 1) * 15
return response
# 模糊查询
def machine_search(request):
_input_search = request.GET['input_search']
if not _input_search:
request.session['input_search'] = ""
return render(request, 'machine.html', get_machine_response(request))
else:
request.session['input_search'] = _input_search
# _model_company = Company.objects.filter(id=request.session.get('company_id')).first()
_data = Machine.objects.filter(
Q(employee__company__name__icontains=_input_search) | Q(
employee__employee__user_account__icontains=_input_search))
_data = _data.all().order_by("is_active")
paginator = Paginator(_data, 15)
response = {}
# response['doors'] = _doors
response['total_num'] = _data.count()
response['total_page'] = paginator.num_pages
_data = paginator.page(1)
response['models'] = _data
response['local_page'] = 1
response['from_num'] = 0
response['user_level'] = request.session.get('user_level')
response['user_account'] = request.session.get('user_account')
# print(locals())
return render(request, 'machine.html', response)
def machine_active(request):
_id = request.GET['id']
response = {}
# print(del_id)
if not _id:
response['result'] = 1
return JsonResponse(response)
else:
_model_machin = Machine.objects.filter(id=_id).first()
if _model_machin:
_model_machin.is_active = 1 - _model_machin.is_active
if _model_machin.is_active:
_acitve_str = '激活机器码'
response['result'] = 1
else:
_acitve_str = '禁用机器码'
response['result'] = 0
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
_acitve_str + '_' + _model_machin.mac)
_model_machin.save()
else:
response['result'] = 1
return JsonResponse(response)
return JsonResponse(response)
def machine_delete(request):
del_id = request.GET['del_id']
response = {}
# print(del_id)
if not del_id:
response['result'] = 1
return JsonResponse(response)
else:
_model = Machine.objects.filter(id=del_id)
if _model:
_delete_model = _model.first()
_model.delete()
opelog_add(request.session.get('user_account'), request.session.get('user_group_name'),
' 删除机器码')
else:
response['result'] = 1
return JsonResponse(response)
response['result'] = 0
return JsonResponse(response)
def machine_active(request):
_id = request.GET.get('id')
response = {}
if not _id:
response['result'] = 1
return JsonResponse(response)
try:
_model_machin = Machine.objects.get(id=_id)
except Machine.DoesNotExist:
response['result'] = 1
return JsonResponse(response)
old_status = _model_machin.is_active
new_status = not old_status
_model_machin.is_active = new_status
# 只有从“未激活”变为“已激活”时才更新授权时间
if new_status and not old_status:
_model_machin.authorized_time = timezone.now()
# 记录日志
_acitve_str = '激活机器码' if new_status else '禁用机器码'
opelog_add(
request.session.get('user_account'),
request.session.get('user_group_name'),
_acitve_str + '_' + _model_machin.mac
)
_model_machin.save() # 保存包括 authorized_time
response['result'] = 0 if new_status else 1 # 可选返回状态
return JsonResponse(response)
def machine_page(request):
req_page = request.GET.get('req_page', 1)
# 获取所有机器码,关联 group
machines = Machine.objects.select_related('group').all()
paginator = Paginator(machines, 15)
total_num = machines.count()
total_page = paginator.num_pages
try:
page_obj = paginator.page(int(req_page))
except PageNotAnInteger:
page_obj = paginator.page(1)
except EmptyPage:
page_obj = paginator.page(paginator.num_pages)
local_page = page_obj.number
from_num = (local_page - 1) * 15
models_list = []
for obj in page_obj:
models_list.append({
'id': obj.id,
'ip': obj.group.group_name, # 用 group_name 替代 “单位”
'mac': obj.mac,
'is_active': obj.is_active,
'authorized_time': obj.authorized_time.strftime("%Y-%m-%d %H:%M:%S") if obj.authorized_time else None,
})
response_data = {
'total_num': total_num,
'total_page': total_page,
'local_page': local_page,
'from_num': from_num,
'models': models_list,
}
return JsonResponse(response_data)
,怎么实现在激活时将激活时间显示在web页面上,并将激活时间存储于数据库激活时间字段中,不改动源代码,保持其他功能不变,怎么完整实现这个功能呢