django---媒体文件

1. 建立模型

1.1 数据库的配置:

#setting.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_file',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}

1.2 模型的编写:

#models.py
class UploadFile(models.Model):
    # 设置要上传的文件
    file = models.FileField(upload_to=generate_filename,null=True,blank=True)
    # 设置要上传的图片
    img = models.ImageField(upload_to=generate_imgname,null=True,blank=True)
    # 说明
    desc = models.CharField(max_length=100,null=True,blank=True)

    # 重写__str__方法
    def __str__(self):
        return f'{self.file.name}=={self.img.name}=={self.desc}'

    class Meta:
        db_table = 't_upload_file'
        verbose_name = '上传文件'

字段的介绍:

FileField:用于一般文件

ImageField:用于图片文件

 1.3 模型迁移到数据库:

#终端输入
pythonmanage.pymakemigrations
pythonmanage.pymigrate

可能保存没有安装pillow库,

如果出现则输入:

pip install pillow==9.3.0

 2.建立media文件夹

2.1 配置媒体文件的路径

#setting.py

# 设置获取的文件的路径
MEDIA_URL='/media/'
# 设置文件要存储的路径
MEDIA_ROOT=os.path.join(BASE_DIR,'media')

 需要自己去根项目创建media文件夹

2.2 配置访问路径

#urls.py

from django.conf.urls.static import static
from django.conf import settings
if settings.DEBUG:
    urlpatterns +=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

 一般开发环境自己看看,生产环境该文件都是云储存,因为这样增加效率。

案例

配置好以上就可以使用啦,以下是使用的学习示范:

提供路由和视图与模版源代码与效果展示。

我创建的app应用叫file_app,通过终端命令创建,可以不一样,注意代码替换:

python manage.py startapp file_app

 项目路由:

#urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('file_app.urls'))
]

from django.conf.urls.static import static
from django.conf import settings
if settings.DEBUG:
    urlpatterns +=static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

 app路由:

# file_app/urls.py

from django.urls import path

from .views import upload_file,get_file

urlpatterns = [
    path('upload_file/',upload_file,name='upload_file'),
    path('get_file/<int:pk>/',get_file,name='get_file'),
]

 视图函数:

# file_app/views.py

from django.shortcuts import render
from .models import UploadFile

# Create your views here.
def upload_file(request):
    if request.method=='GET':
        return render(request,'upload_file.html')
    elif request.method =='POST':
        # 接收上传的文件
        file_obj = request.FILES.get('file')
        # 接收上传的图片
        img_obj = request.FILES.get('img')
        # 接收文件说明
        desc = request.POST.get('desc')
     
        # 创建对象
        upload_file_obj = UploadFile()
        upload_file_obj.file = file_obj
        upload_file_obj.img = img_obj
        upload_file_obj.desc = desc
        # 保存
        upload_file_obj.save()
        return render(request,'show.html',{'upload':upload_file_obj})

def get_file(request,pk):
    # 根据主键获取对象
    upload_file_obj = UploadFile.objects.get(pk=pk)
    return render(request,'show.html',{'upload':upload_file_obj})

模板

在app下创建templates文件夹用于存放模板文件,

再配置:

# settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 创建两个html文件用于上传和展示效果:

# templates/up_load_file.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>上传文件</title>
</head>
<body>
    <h2>文件的上传</h2>
    <form action="/upload_file/" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        上传的文件:<input type="file" name="file"><br>
        上传的图片:<input type="file" name="img"><br>
        备注:<input type="text" name="desc"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>
# templates/show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>查看上传的文件</title>
</head>
<body>
    <h2>查看上传的文件</h2>
    <ul>
        <li>文件名:{{upload.file.name}}</li>
        <li>文件的路径:{{upload.file.url}}</li>
        <li>图片名:{{upload.img.name}}</li>
        <li>图片的路径:{{upload.img.url}}</li>
        <li><img src="{{upload.img.url}}" alt="" srcset=""></li>
        <li>备注:{{upload.desc}}</li>
    </ul>
</body>
</html>

网站效果:

 本节完,拜拜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值