当前位置:   article > 正文

用c语言设计图书管理系统_用Django设计简易订单附件管理系统-4

附件管理产品设计
4194d2058ce4a0714b19f4feae0ae320.png

14、实现文件下载功能

之前我们在前端页面的操作处,只是直接显示了下载两个字,现在我们要想实现点击“下载”文本链接时将相应的文件下载到电脑中。我们先修改index.html文件:

下载

通过get方式向后台download路由传递数据。

然后我们修改urls.py,注意这里由于要使用正则表达式,所以用的re_path:

re_path('download/(?P.*)',views.Download,name='download'),

注:fileurl不知为什么没起使用

接着编写了views.py中的代码:

def Download(request,fileurl):    url = os.path.join("." + MEDIA_URL,request.GET['fileurl'])    file_name = re.findall(".*/(.*?$)",url)[0]    response = StreamingHttpResponse(file_iterator(url))    # 以流的形式下载文件,这样可以实现任意格式的文件下载    response['Content-Type'] = 'application/octet-stream'    # Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名    response['Content-Disposition'] = 'attachment;filename="{}"'.format(file_name)    return response

这个函数的作用是取得url,注意url完整地址是:./upload/年/月/日/文件名,在这里我搞了很久很久。

网上还提供了一个文件生成器:

def file_iterator(file_path, chunk_size=512):    """    文件生成器,防止文件过大,导致内存溢出    :param file_path: 文件绝对路径    :param chunk_size: 块大小    :return: 生成器    """    with open(file_path, mode='rb'as f:        while True:            c = f.read(chunk_size)            if c:                yield c            else:                break

最后重启服务,点击下载,但毫不意外的又出现了意外,但凡文件名中有中文的,下载时仅显示一个download:

e0c240a59a323114fa11bb74778c60a2.png

上网搜索了一下:

导入一个方法:

from django.utils.encoding import escape_uri_path

然后在将该方法应用到file_name上:

response['Content-Disposition'] = 'attachment;filename="{}"'.format(escape_uri_path(file_name))

再次点击下载,终于成功了!

cd0624fdf8dec6f10229ddcb0226c8c3.png

15、后台创建几个操作员

目前为止,只有一个administrator帐号,为了交付给同事使用,需要创建几个帐号。

首先我们通过127.0.0.1:8000/admin登录后台管理,在站点管理这里增加帐号:

8d31294dc2b021c8a2dc78ec8058023a.png

增加了一个帐户后,我们通过右上角的“注销”来退出administrator,然后使用新的帐号进行登录。

昨天创建帐号后,密码是明文,我还特意去网上找了解决方法,本来今天要写到这个文档中,结果今天发现又正常了,不过我决定还是将其写到这一步骤当中,只能说Django中真的是太多坑了!

16、解决在后台创建用户后,因为密码是明文而无法登录的问题:

先在models.py中创建一个UserProfile的表,该表继承自AbstractUser,添加如下代码:

from django.contrib.auth.models import AbstractUserfrom django.db import modelsclass UserProfile(AbstractUser):    phone = models.CharField(max_length=11,verbose_name='手机号',null=True,blank=True)

然后在admini.py中添加如下代码:

from django.contrib import adminfrom django.contrib.auth.admin import UserAdminfrom django.utils.translation import gettext_lazyfrom .models import UserProfile@admin.register(UserProfile)class UserProfileAdmin(UserAdmin):    list_display = ['username','password']    list_per_page = 10    add_fieldsets = (        (None, {u'fields': ('username''password1''password2')}),        (gettext_lazy('User Information'), {'fields': ( 'phone',)}),                     )

这样添加后,在admin后台创建用户后就能解决了。

17、为新创建的用户添加管理订单附件的权限

由于会有多个人参与附件管理,所以在修改用户信息时,给创建了一个组,并为组选择了如下几个权限:

ef3b5983f45eae9cb2706aad521665c2.png

这样的话以后新增加上传用户时只需要选择这个组就可以了,更加方便管理。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/799792
推荐阅读
相关标签
  

闽ICP备14008679号