管理后台由网站的管理员负责查看、添加、修改、删除数据,为此,Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块,用django将后台数据库表里面的内容以Excel表格的形式显示到网页中。
一、用django将后台数据库表里面的内容以Excel表格的形式显示到网页中
管理后台由网站的管理员负责查看、添加、修改、删除数据,为此,Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块,用django将后台数据库表里面的内容以Excel表格的形式显示到网页中。
基本实现导出功能
在admin.py定义导出函数
# 实现数据导出功能
exportable_fields = (‘username’, ‘city’, ‘phone’, ‘bachelor_school’, ‘master_school’, ‘degree’, ‘first_result’, ‘first_interviewer_user’,
‘second_result’, ‘second_interviewer_user’, ‘hr_result’, ‘hr_score’, ‘hr_remark’, ‘hr_interviewer_user’)
# request是用户发起的请求,queryset是用户在界面上选择的结果列表里面的数据集合
def export_model_as_csv(modeladmin,request,queryset): # request是用户发起的请求,queryset用户在列表选择的结果列表里的数据集合
response = HttpResponse(content_type=’text/csv’)
field_list = exportable_fields # 导出的字段
# 指定导出文件的格式
response[‘Content-Disposition’] = ‘attachment; filename=%s-list-%s.csv’ %(
‘name’,
datetime.now().strftime(‘%Y-%m-%d-%H-%M-%S’)
)
#写入表头
writer = csv.writer(response)
writer.writerow(
# 把每一个字段对应的页面显示的中文名,作为我们导出文件里面的表头,
[queryset.model._meta.get_field(f).verbose_name.title() for f in field_list]
)
# 把数据的每一行写进去
for obj in queryset:
#单行记录(各个字段的值)写入到csv文件
csv_line_values = []
for field in field_list:
field_object = queryset.model._meta.get_field(field)
field_value = field_object.value_from_object(obj)
csv_line_values.append(field_value)
writer.writerow(csv_line_values)
logging.info(‘%s exported %s candidate records’ % (request.user, len(queryset)))
return response
# 定义这个函数的属性
export_model_as_csv.short_description = u’导出为CSV文件’
# 导出按钮的权限,如果用户有export的权限,则运行调用allowed_permissions这个方法,则菜单会展示出来
export_model_as_csv.allowed_permissions = (‘export’, )
class CandidateAdmin(admin.ModelAdmin):
# 定义actions,将函数注册到actions里面
actions = [export_model_as_csv, ]
pass
用pandas实现导出功能
def export_model_as_csv(modeladmin,request,queryset): # request是用户发起的请求,queryset用户在列表选择的结果列表里的数据集合
response = HttpResponse(content_type=’text/csv’)
response[‘Content-Disposition’] = ‘attachment; filename=%s-list-%s.csv’ % (
‘name’,
datetime.now().strftime(‘%Y-%m-%d-%H-%M-%S’)
)
data = pd.DataFrame(list(queryset.values()))
id_list = list(data[‘app_username’].unique())
name_list = []
for i in id_list:
name = str(data[data[‘app_username’] == i][‘name’].unique()[0])
name_list.append(name)
new_data = pd.DataFrame(columns=pd.MultiIndex.from_product([data[‘sign_date’].unique(), [‘早’, ‘中’, ‘晚’]]), index=pd.MultiIndex.from_arrays([id_list, name_list],names=[‘学号’,’姓名’]))
for i in range(len(data)):
obj = data.iloc[i]
new_data.loc[obj[‘app_username’],obj[‘name’]][obj[‘sign_date’].strftime(‘%Y-%m-%d’)]=[JudgeTem(obj[‘morning_temperature’]), JudgeTem(obj[‘afternoon_temperature’]), JudgeTem(obj[‘evening_temperature’])]
new_data = new_data.style.applymap(color, subset=new_data.columns)
output = io.BytesIO() # 配置一个BytesIO 这个是为了转二进制流
new_data.to_excel(output)
output.seek(0) # 把游标归0
response.write(output.getvalue()) # 写入数据
output.close() # 关闭
return response # 返回
延伸阅读:
二、Django 是什么
Django 是一个高级的 Python 网络框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django 负责处理网站开发中麻烦的部分,因此你可以专注于编写应用程序,而无需重新开发。 它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。
Django 可以使你的应用具有以下优点:
完备性
Django 遵循“功能完备”的理念,提供开发人员可能想要“开箱即用”的几乎所有功能。因为你需要的一切都是一个”产品“的一部分,它们都可以无缝结合在一起,遵循一致性设计原则,并且具有广泛和最新的文档。
通用性
Django 可以(并已经)用于构建几乎任何类型的网站—从内容管理系统和维基,到社交网络和新闻网站。它可以与任何客户端框架一起工作,并且可以提供几乎任何格式(包括 HTML,Rss 源,JSON,XML 等)的内容。你正在阅读的网站就是基于 Django。
在内部,尽管它为几乎所有可能需要的功能(例如几个流行的数据库,模版引擎等)提供了选择,但是如果需要,它也可以扩展到使用其他组件。
安全性
Django 帮助开发人员通过提供一个被设计为“做正确的事情”来自动保护网站的框架来避免许多常见的安全错误。例如,Django 提供了一种安全的方式来管理用户账户和密码,避免了常见的错误,比如将 session 放在 cookie 中这种易受攻击的做法(取而代之的是 cookies 只包含一个密钥,实际数据存储在数据库中)或直接存储密码而不是密码哈希。
密码哈希是通过密码散列函数发送密码而创建的固定长度值。Django 能通过运行哈希函数来检查输入的密码 – 就是 – 将输出的哈希值与存储的哈希值进行比较是否正确。然而由于功能的“单向”性质,即时存储的哈希值受到威胁,攻击者也难以解决原始密码。(但其实有彩虹表 – 译者观点)
默认情况下,Django 可以防范许多漏洞,包括 SQL 注入,跨站点脚本,跨站点请求伪造和点击劫持。