-
前端代码:
<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"