等同于view的class
里边可以写
get 和post
后台页面自定义主要在adminx.py下,相关代码如下:
from xadmin.views.base import CommAdminView
from django.db.models import Count
from pure_pagination import Paginator,PageNotAnInteger
from .models import Sanlv_data
from django.views.generic.base import View
import os,io
from django.http import FileResponse
from django.shortcuts import render,HttpResponse,Http404,render_to_response,redirect
from .sanlv import sanlv
from django.contrib import messages
from datetime import datetime
class Sanlv_dataAdmin(object):
# 指向自定义的页面
object_list_template = 'automation/sanlv.html'
# 重写方法,把要展示的数据更新到 context
def get_context(self):
context = CommAdminView.get_context(self)
# date_list = FixedStation.objects.exclude(state="end").dates('default_time', 'day', order='DESC')
# streets = Street.objects.all()
#
# year = self.request.GET.get('year', '')
# month = self.request.GET.get('month', '')
# day = self.request.GET.get('day', '')
# street_id = self.request.GET.get('street', '0')
# if street_id != 0:
# date_list = date_list.filter(street_id=int(street_id))
# if year:
# print(year)
# #response = Download_data(self.request, year, month, day)
# re = Download_excel(street_id,year, month, day)
#
# try:
# page = self.request.GET.get('page',1)
# except PageNotAnInteger:
# page = 1
# p = Paginator(date_list, 10, request=self.request)
# date_lists = p.page(page)
context.update(
{
'title': '最新通知',
'test': '考勤',
# 'date_lists': date_lists,
# 'streets': streets,
# 'street_id':street_id,
}
)
return context
def post(self, request):
FILE_sanlv = request.FILES.get('f_upload_1')#获得文件
# print(str(FILE_sanlv).split('.'))判断文件格式
print(os.path.splitext(str(FILE_sanlv))[1])
#判断文件是否为.xls格式
if os.path.splitext(str(FILE_sanlv))[1] != '.xls':
messages.error(request, "文件格式错误,请上传xls的excel")
return redirect('http://192.168.1.3:8000/xadmin/projectdaily/sanlv_data/')
else:
path = os.getcwd() # 获取当前目录 F:\2.数据平台\SmallOA20210302
print(path)
files_url = path + '\Apps\projectdaily\三率表.xls'
if os.path.exists(files_url): # 如果文件存在
# 删除文件,可使用以下两种方法。F:\2.数据平台\SmallOA20210302\Apps\projectdaily\三率表.xls
os.remove(files_url)
#新任务执行
error = sanlv.read_write(FILE_sanlv)
if error == '':
allfiles = os.listdir(path + '\Apps\projectdaily') # 获取当前目录 F:\2.数据平台\SmallOA20210302
if allfiles:
print(allfiles)
file = open(files_url, 'rb')
try:
response = FileResponse(file)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="{0}{1}{2}{3}"'.format(datetime.now().year,datetime.now().month,datetime.now().day,'三率.xls').encode('utf-8', 'ISO-8859-1')
response['messages'] = "执行成功,等待下载"
# response.write(context)
# messages.success(request, "执行成功,等待下载")
return response
except Exception:
messages.error(request, "未生成三率表格")
raise Http404
else:
messages.error(request, error)
return redirect('http://192.168.1.3:8000/xadmin/projectdaily/sanlv_data/')
#进行注册
xadmin.site.register(Sanlv_data, Sanlv_dataAdmin)
参考链接: