Django中图片的上传并显示

   一、settings配置文件中配置

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\\', '/')#media即为图片上传的根路径

 二、url路由中配置

复制代码
from django.conf import settings
from django.conf.urls.static import static

from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index,name='index'),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #如果单纯的是上传,文件并不用来显示或者读取,就不用加这个
复制代码

三、models.py文件中的写法

这个表的img是存的是文件保存的路径.

class Book(models.Model):

    name = models.CharField(max_length=32)
    date1 = models.DateTimeField(auto_now=True,null=True)
    date2 = models.DateTimeField(auto_now_add=True,null=True)
    img = models.ImageField(upload_to='img',null=True) #写上upload_to,后面指定一个路径,那么将来上传的文件会直接生成到配置文件中的那个medias文件夹中的img文件夹中,不需要我们自己写读取文件内容写入本地文件的操作,django内部帮我们自动处理了

 

四、views视图函数中的写法,上传一个图片

复制代码
from django.shortcuts import render,HttpResponse,redirect

from app01 import models

def index(request):
    if request.method == 'GET':
        return render(request,'index.html')
    else:
        username = request.POST.get('username')
        file_obj = request.FILES.get('file')
        print(file_obj)
        models.Book.objects.create(
            name = username,
            img = file_obj
        )
        return render(request,'index.html')
复制代码

 

五 在index.html文件

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<form action="{% url 'index' %}" enctype="multipart/form-data" method="post">
    {% csrf_token %}
    <div>用户名<input type="username" name="username"></div>
    <div>文件  <input type="file" name="file"></div>
    <div><input type="submit"></div>



</form>

</body>
</html>
复制代码

 

六通过页面将上传文件

 

 

更新上传了的文件(注意,只是会更新数据库中那个字段保存的文件的路径,但是之前上传的文件是不会被自动删除的,需要我们自行再写逻辑来删除之前上传错的或者需要被覆盖的文件。还有就是如果上传的文件名称是相同的那么你会发现数据库中这个字段的路径后面的文件名称会出现一个乱起八糟的随机字符串,这是因为上传的文件名称冲突了,django为了解决这个冲突,给你改了一下你的文件名称。)

 

obj = models.Book.objects.get(name='111')
obj.img=file_obj
obj.save()

#下面的update方法是不能更新正确更新保存的文件路径的,除非我们自己手动拼接文件路径,然后img=路径来进行update更新
models.Book.objects.filter(name='chao2').update(img=file_obj)

 

 

 

 

八 查看上传的文件:

from django.shortcuts import render,HttpResponse,redirect

from app01 import models
def index(request):
    objs = models.Book.objects.all()
    return render(request,'index.html',{'objs':objs})

 

九 html文件

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<div>
    {% for obj in objs %}
        <img src="/media/{{ obj.img }}" alt="">

    {% endfor %}


</div>



</body>
</html>
复制代码

 

在一次访问网页可以看到图片

 

 上传同一个文件名的时候会出现文件名的乱码,暂时不知道怎么解决,没有写,想起来写吧

 

posted @   木木霖  阅读(6374)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示