自己用Djiango+Django REST framework手写写一个文件上传显示的功能

  • 前端代码:

<body>
    <div>
        <form action="save/" method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            <label>图片:</label>
            <input type="file" name="img">
             <input type="submit">
        </form>
    </div>
    <div>
        {% for i in im %}
        <img src="{{i.imgpic}}">
    {% endfor %}
    </div>
</body>

解释一下>>>>>

action="save/"  你请求的路径;

{% csrf_token %} 这个是因为Django有csrf(跨站请求伪造)验证,所以要加上

 

 method="POST" 请求方式

enctype="multipart/form-data"  文件上传必备>>自己百度去

 

  • 后台代码:

setting.py 

多加的

MEDIA_URL = '/media/'
# 设置上传文件的路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

urls.py

urlpatterns = [

    url(r'^index[.]html$', views.ImServerView.as_view()),
    url(r'^save/$', views.SaveView.as_view()),
    
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

models.py

from django.db import models

# Create your models here.


class ImInfo(models.Model):
    # 商品模型:gpic为该商品的图片在项目中存储的相对路径
    imgpic = models.ImageField(verbose_name="图片路径", default="image/default.png", upload_to='DF_goods/Image/%Y/%m', null=True, blank=True)  # 商品图片

    class Meta:
        db_table = 'img'  # 指明数据库表名
        verbose_name = '图片'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称

views.py

后端代码我用到了Django REST framework

from django.shortcuts import render

# Create your views here.
from rest_framework.views import APIView
from rest_framework.response import Response
from .Serializer import ImInfoSerializer
from .models import ImInfo


class ImServerView(APIView):
    def get(self, request):
        im_list = ImInfo.objects.all()
        serializer = ImInfoSerializer(im_list, many=True)
        # template = loader.get_template('index.html')
        data = serializer.data
        # print(data)
        return render(request, 'index.html', {"im": data})


class SaveView(APIView):

    def post(self, request):
       im = request.data['img']
       if im.multiple_chunks():
           return Response('222')

       imgup =ImInfo(
           imgpic=im
       )
       imgup.save()
       return Response('111')

 

serializer.py

这是序列化器,我显示图片时用到了 def get(self, request): 中有使用

我只是实验了一下效果咋样,这篇文章上有很多坑我没有说,但是你代码没有问题,我认为如果把什么都写出来没意思,学习东西还是自己研究比较好,如果代码中有不明白的地方和问题直接百度,有好的想法可以给我留言

from rest_framework import serializers
from .models import ImInfo
from django.conf import settings


class ImInfoSerializer(serializers.ModelSerializer):
    """图书数据序列化器"""
    class Meta:
        model = ImInfo
        fields =['imgpic']

 

最后图片渲染出来的路径:

<img src="/media/DF_goods/Image/2019/12/50f8c35ade3f3a1bfe8837682e2ef64.jpg">

可以看到路径是拼接的     /media/      +      DF_goods/Image/2019/12/50f8c35ade3f3a1bfe8837682e2ef64.jpg"

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值