【django开发】 django-admin二次开发

目录

1. 在admin界面添加预览图

2.FileField 或 ImageField 字段上传中文文件名的文件

3.对 FileField 或 ImageField 上传的文件类型进行筛选(必须上传文件)

4.对 FileField上传的非空文件进行类型筛选(允许不上传文件或上传指定格式)

5.删除记录时自动删除上传的文件

6.使用simpleui美化后台


 


1. 在admin界面添加预览图

在模型界面( model.py )实例化一个类并继承django.db.models.Model

定义图片字段 img = models.ImageField('图片', upload_to="存储路径")

导入模块

#model.py
from django.utils.html import format_html      #引入模块

def file_link(self):                           #函数名请随意 
    return format_html('<img src="{}" width="100px" />', 
                        self.img.url)

file_link.short_description= '预览图'          #函数名.short_description

 

#admin.py
list_displa = ['file_link']

exclude = ('file_link', )   #在增删数据时不显示(元组,必须加逗号)

2.FileField 或 ImageField 字段上传中文文件名的文件

上传文件的url 为/media/xxxx.txt       

open文件时需要的路径为 media/xxxx.txt

所以需要对url进行[1::]切片

但是python字符串默认并非是unicode,如果在字符创中使用Unicode字符,如中文字符,必须要经过转换

#model.py
from django.utils.deconstruct import deconstructible 

@deconstructible
class re_name(object):      #继承object (新式类)
    def __init__(self, path):        
        self.path = os.path.join(path, "%s")   
    def __call__(self, instance, filename):     # __call__ 把当前实例变成可调用的对象
        import pypinyin                         #把中文转成拼音的包
        def pinyin(word):
            s = ''                              
            for i in pypinyin.pinyin(word, style=pypinyin.NORMAL):                                                 
            #style=pypinyin.NORMAL 普通模式,不带音节
                s += s.join(i)            
            return s
        return self.path % (pinyin(filename))

3.对 FileField 或 ImageField 上传的文件类型进行筛选(必须上传文件)

#model.py
字段名 = models.FileField
        (
        '歌词', 
        upload_to=re_name('songLyric/'), 
        default='暂无歌词',                                             #默认值
        blank=True,                                                    #允许为空   
        validators = [                                                 #自定义验证规则
                      validators.FileExtensionValidator(['txt','pdf'], message='歌词文件目前仅支持.txt与.pdf')
                    ])                        
#若文件后缀 not in ['txt','pdf'] 返回message中的的错误信息到前端

4.对 FileField上传的非空文件进行类型筛选(允许不上传文件或上传指定格式)

#model.py
def fiel_content(value):                  
    if value!="defaults" and value.name.split(".")[1] != "txt": 
            #如果value不为默认值(说明有数据上传)且上传的文件后缀不为.txt
            raise ValidationError("歌词文件只允许.txt文件")  #括号中为错误提示信息
                
#model.py
字段名 = models.FileField('测试', 
                          upload_to=re_name('songLyric/'), 
                          default='defaults',          #不上传时的默认值
                          blank=True,                 #允许不上传
                          validators =[file_content]  #file_content为上文的函数名
                        )

5.删除记录时自动删除上传的文件

使用FileField或ImageField时会向服务端上传文件,但当用户删除此条记录时,只能删除数据库中对文件路径的记录,无法删除源文件,故需要其他增加一些限制。(一定要写在定义class后)

#model.py
@receiver(pre_delete, sender=需要操作的model中的类名)
def mymodel_delete(sender, instance, **kwargs):
  instance.file.delete(False)

6.使用simpleui美化后台

首先pip install simpleui

然后在settings.py的 INSTALLED_APPS 首行添加‘simpleui’

随后在git中找到simpleui的源码,将其中的simpleui目录下的templatetags文件夹全部拷贝到:

项目文件夹/venv(虚拟环境)/Lib/site-packages/simpleui/文件夹中

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值