Django 上传图片操作

Django上传图片

  • 在admin中上传图片
  • 在admin.py文件中注册,PicTest
from django.contrib import admin
from booktest.models import *

admin.site.register(PicTest)
  • 在admin创建管理员账户
# create super user
python manage.py createsuperuser
  • 在settings中修改配置文件
STATIC_URL = '/static/'

MEDIA_ROOT=os.path.join(BASE_DIR,"static/upImg")
  • 在models.py中创建数据模型
from django.db import models

# Create your models here.

class PicTest(models.Model):
pic = models.ImageField(upload_to='path') # 参数 upload_to 路径重复的话会重新打开文件

自定义文件上传

  • 文件上传时,文件数据储存在request.FILES属性中

  • form表单要上传文件需要添加属性 enctype=“multipart/form-data”

  • 上传文件必须是post请求

  • settings.py部分

# 添加路径
MEDIA_ROOT=os.path.join(BASE_DIR,"static/upfile")
  • views.py部分
from django.shortcuts import render,HttpResponse

# Create your views here.

def upfile(request):
return render(request,'upfile.html')

import os
from django.conf import settings

def savefile(request):
if request.method == 'POST':
f = request.FILES['file'] # input 框name 属性
# 文件在服务器客户端的路径
filePath = os.path.join(settings.MEDIA_ROOT,f.name)
with open(filePath,'wb') as fp:
for info in f.chunks():
fp.write(info)
return HttpResponse('上传成功')
else:
return HttpResponse('上传失败')
  • 网页部分

  • {% csrf_token %}作用

    • django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,如果注释会报错“CSRF验证失败. 请求被中断.”
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义上传文件</title>
</head>
<body>
{# method=post 添加属性 enctype="multipart/form-data" #}
<form method="post" action="/savefile/" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file" /> <br>
<input type="submit" value="上传">

</form>

</body>
</html>

在admin中上传,Django框架会自动验证是不是图片格式。自定义的上传需要自己验证上传的文件格式是不是图片,验证图片格式会后续补充,路由部分请自行补充

猜你喜欢

转载自blog.csdn.net/qq_42815634/article/details/84330683