Django 图片上传到数据库(调用显示)

一、图片显示

1、在models.py中,需建立模型,这里使用了ImageField字段,用来存储图片路径,这个字段继承了FileField字段,本质上是一样的。这里Image.Field的默认max_length=100,我们可以根据需求自己指定。upload_to用于指定上传到哪个路径下。

PS: 使用ImageField首先需要装Pillow。

1 pip install Pillow


2、建立好模型,需要进行迁移操作,python manage.py makemigrations  ,python manage.py migrate

3、在settings.py中,设置MEDIA_URL和MEDIA_ROOT

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

 告诉Django,媒体文件的位置在哪里。这样就和数据库存储的路径相对应了,具体就是MEDIA_ROOT指定目录,upload_to就是在这个目录下进行操作

4、显示图片(图片调用): 

为了能够方便录入数据,使用django后台管理,创建管理页面,python manage.py createsuperuser 根据提示进行创建,在app下admin.py中将需要上面创建的模型进行添加 admin.site.register(Test),开启runserver,打开admin页面,就可以创建具体的数据了。

需要调用的话,在view.py中将数据进行传递

curr_article = Test.objects.all()

return render(request, 'detail.html', {'curr_article':curr_article})

在模板中将图片展现出来:

为了html模板能正确找到MEDIA_URL,TEMPLATES中导入相关的包: 'django.template.context_processors.media'


参考官方文档即可,这样图片的url才是完整的,页面就可以正常显示图片了

二、上传图片

首先需要一个form,enctype="multipart/form-data" method="post" 是必须要填写的,表示数据不经过编码,直接上传。{%csrf_token%}也是post时,django强制要求的。

<form enctype="multipart/form-data" action="#" method="post">

    {% csrf_token %}

    <input type="text" name="name">

    <input type="file" name="img">

    <input type="submit" value="upload">

</form>

然后去views.py对视图函数进行操作

if request.method == 'POST':

    file = request.FILES['img']

    if file:

        new_img = Test(

            name=request.POST.get('name'),

            image=file  )

        new_img.save()

与普通的数据不同,这里用了request.FILES字典的方式去获取文件,然后创建新的数据,并保存到数据库中

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。