Django-网页图片上传

文件上传和文件复制类似,文件复制需要打开两个文件,一边读取,一边写入。
原始方法:
先制作出上传图片的页面

# urls.py
urlpatterns = [
    url(r'^upload_file/', views.upload_file, name='upload_file'),
]

文件上传,需要用到POST请求,模板页面如下:

# 如果请求是get,就显示上传文件的页面,如果是POST,则表示文件上传到后台
<form action="{% url 'app:upload_file' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <span>文件:</span>
    <input type="file" name="icon">
    <br>
    <input type="submit" value="上传">
</form>

网页传输不会将整个文件直接上传,使用enctype="multipart/form-data"将文件分成多个部分。
然后在views.py中获取文件对象。

def upload_file(request):
    if request.method == 'GET':
        return render(request, 'upload.html')
    elif request.method == 'POST':
        icon = request.FILES.get('icon')
        with open(r"C:\Users\LXYKER\PycharmProjects\ImgUpload\static\img\icon.jpg", 'wb') as save_file:
            for part in icon.chunks():
                save_file.write(part)
                save_file.flush()
        return HttpResponse('文件上传成功')

利用with open打开空文件,然后利用for循环将接收到的icon写入到该文件中。
“每接收到一部分,就冲一下马桶”,避免堵塞。

于是一个简单的网页图片上传就做好了。



将图片上传到数据库
利用ORM,在数据库中存放图片路径。首先创建UserModel的表:

from django.db import models


# Create your models here.
class UserModel(models.Model):
    u_name = models.CharField(max_length=16)

    # upload_to 指的是相对路径,相对于的是MEDIA_ROOT媒体根目录
    u_icon = models.ImageField(upload_to='icons')

表中有两个字段,一个存放用户名,另一个存放图片相对路径。需要在settings.py中添加MEDIA_ROOT = os.path.join(BASE_DIR, 'static/upload')
views.py中,如果是GET请求,渲染image_field.html,如果是POST请求,就需要创建一个UserModel的对象,然后将上传过来的usernam和icon保存下来:

def image_field(request):
    if request.method == 'GET':
        return render(request, 'image_field.html')
    elif request.method == 'POST':
        username = request.POST.get('username')
        icon = request.FILES.get('icon')

        user = UserModel()
        user.u_name = username
        user.u_icon = icon
        user.save()

        return HttpResponse('用户%s的头像上传成功' %user.u_name)

生成图片路径如下:
在这里插入图片描述在这里插入图片描述

更多内容,如Ajax上传头像、头像预览等功能,参考博客:Django项目实战之用户头像上传与访问

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Django网页显示上传图片,可以按照以下步骤操作: 1. 在Django中创建一个视图函数,用来处理图片上传和显示。 2. 在Django的urls.py文件中,将该视图函数的URL路径映射到一个URL。 3. 在HTML模板中,添加一个表单,用于上传图片。 4. 在该表单中,指定表单的enctype属性为"multipart/form-data",这样才能上传文件。 5. 在表单中添加一个input元素,type属性为"file",表示上传文件的输入框。 6. 在视图函数中,获取上传图片,并将其保存到服务器的某个文件夹中。 7. 在HTML模板中,将图片的URL路径插入到img标签的src属性中,从而实现图片的显示。 下面是一个简单的Django视图函数代码示例: ```python from django.shortcuts import render from django.conf import settings from django.core.files.storage import FileSystemStorage def upload(request): if request.method == 'POST' and request.FILES['image']: image = request.FILES['image'] fs = FileSystemStorage() filename = fs.save(image.name, image) uploaded_file_url = fs.url(filename) return render(request, 'upload.html', {'uploaded_file_url': uploaded_file_url}) return render(request, 'upload.html') ``` 在上面的代码中,我们首先判断请求的方法是否为POST,并且是否包含名为"image"的文件。如果是,则将文件保存到服务器上的某个文件夹中,并将其URL路径传递给模板渲染。如果不是,则直接渲染上传页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值