(1)静态文件夹需要在setting里面进行声明
STATICFILES_DIRS=[(os.path.join(BASE_DIR,‘static’))]
(2)可以直接通过服务器来进行静态文件的访问
(3)利用新的文件来接受上传的文件
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\叉叉叉\PycharmProjects\DjangoModel\static\img\icon.jpg",'wb') as save_file:#注意这个地方有一个r字符,否则会报错
for part in icon.chunks():# 打碎开来再写
save_file.write(part)
save_file.flush()
return HttpResponse("文件上传成功")
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="{% url 'relation:image_file' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div>用户名</div>
<input type="text" name="username">
<div>文件</div><input type="file" name="icon">
<br>
<input type="submit" value="上传">
</form>
</body>
</html>
注意中间存在一个把图片打碎之后又重新组合的过程
同时还存在一个相对路径的问题:
class UseModel(models.Model):
u_name=models.CharField(max_length=16)
#upload _to 的相对路径是指 MEDIA_ROOT 媒体的根目录
u_icon=models.ImageField(upload_to='icons')
MEDIA_ROOT = os.path.join(BASE_DIR,'static/upload')
def image_file(request):
if request.method=="GET":
return render(request,'upload.html')
elif request.method=="POST":
icon=request.FILES.get("icon")
username=request.POST.get("username")
user=UseModel()
user.u_icon=icon
user.u_name =username
user.save()
return HttpResponse("上传成功%d" %user.id)
通过路径从而实现图片的获取
def mine(request):
username=request.GET.get("username")
user=UseModel.objects.get(u_name=username)
print(user.u_name)
print('/static/upload/'+user.u_icon.url)
print(user.u_icon.url)
data={
"usename":user.u_name,
"icon_url":'/static/upload/'+user.u_icon.url
}
return render(request,'picure.html',context=data)