django中图片的上传

案例:用户注册上传图片。

1:首先创建用户表,其实本质上保存的是文件的路径。

from django.db import models

# Create your models here.
class Yonghu(models.Model):
    u_name=models.CharField(max_length=50)
    u_age=models.IntegerField(default=17)
    #upload 文件上传的相对路径名字,是文件上传的路径的前缀
    u_img=models.ImageField(upload_to="icon")

2:上传目录需要配置才能使用

在setting中最后追加

MEDIA_ROOT=os.path.join(BASE_DIR,"static/upload")

例如:

3:html上表单标签:

 <input type="file" name="img"> <br/>
  表单提交需要用post请求.还需要设置数据的编码类型,如: enctype="multipart/form-data" 

<form action="{% url 'day7:doyoursload' %}" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    name:<input type="text" name="name"><br>
    age:<input type="text" name="age"><br>
    img:<input type="file" name="img"><br>
    <input type="submit" value="submit">

</form>

4:服务器获取:

def doupload(request):
    name=request.POST.get("name")
    age=request.POST.get("age")
    img=request.FILES.get("img")
    # print(img)
    user=Yonghu()
    user.u_name=name
    user.u_age=age
    user.u_img=img
    user.save()
    return HttpResponse("Success")

注意:

5:展示图片:

在这里假如要获取u_name=xiaoyu上传的照片

def getimg(request):
    name=Yonghu.objects.filter(u_name="xiaoyu").first()
    # name=Yonghu()
    img=name.u_img
    # print(img.url)
    # print(img.path)
    imgpath="/static/upload/"+img.url
    print(imgpath)

#打印结果为/static/upload/icon/b.jpg
    data={
        "all":imgpath
    }
    return  render(request,"showimg.html",context=data)

把打印结果与这个路径比较就明白了。

当初setting设置的

MEDIA_ROOT=os.path.join(BASE_DIR,"static/upload") 后面的路径就是设置文件的上传目录

建表的    u_img=models.ImageField(upload_to="icon") icon就是upload后面的那个目录

合起来就是/static/upload/icon/b.jpg

最后一步,照片展示出来,重新建一个html页面

因为我们已经获得了这个路径,这个路径作为“all”,现在就要把他放在新建html页面的img标签的src属性上

<img src="{{ all }}">

然后访问这个html的地址,url在这里我就不说了,就可以看到那个图片了。

猜你喜欢

转载自blog.csdn.net/XYLHxylh/article/details/82763047
今日推荐