原生文件上传,
with open 新建文件 ,写入文件
def upload_file(request):
if request.method=='GET':
return render(request,'upload.html')
elif request.method=="POST":
new_file=request.FILES.get('new_file')
print(type(new_file))
with open("static/img/new_file.jpg",'wb') as save_file:
for part in new_file.chunks():
save_file.write(part)
save_file.flush()
return HttpResponse("文件上传成功")
<form action="{% url "app:img_field" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<span>用户名:</span><input type="text" name="username" placeholder="请输入用户名">
<br>
<span>选择头像文件</span><input type="file" name="icon">
<br>
<button>提交</button>
</form>
用Django 自带的文件管理
首先 在Model 中设置 models.ImageField (需要 pillow包)
class UserModel(models.Model):
u_name=models.CharField(max_length=20)
# 这里upload_to的路径是相对于settings里MEDIA_ROOT设置的目录,然后在该路径下建一个icons的文件夹
# 为避免用户提交的文件过多,可以加上时间生成文件夹 %Y%m%d,可以各种花式写法 如
# icons/%Y%m icons- %Y%m
icons=models.ImageField(upload_to='icons/%Y%m')
这里upload_to的路径是相对于settings里MEDIA_ROOT设置的目录,然后在该路径下建一个icons的文件夹
# 为避免用户提交的文件过多,可以加上时间生成文件夹 %Y%m%d,可以各种花式写法 如
# icons/%Y%m icons- %Y%m
views.py 中只需要 .save() 及可以在数据库中保存文件的相对路径
def img_field(request):
if request.method=="GET":
return render(request,'img_field.html')
elif request.method=="POST":
username=request.POST.get('username')
print(username)
icon=request.FILES.get('icon')
user=UserModel()
user.u_name=username
user.icons=icon
user.save()
return HttpResponse("用户上传成功%s 头像地址%s" %(user.id,user.icons))
调用或者显示 刚上传的文件
def mine(request):
username=request.GET.get('username')
user=UserModel.objects.get(u_name=username)
uname=user.u_name
icon='/static/upload/'+user.icons.url
return render(request,'mine.html',context=locals())
<form action="{% url "app:img_field" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<span>用户名:</span><input type="text" name="username" placeholder="请输入用户名">
<br>
<span>选择头像文件</span><input type="file" name="icon">
<br>
<button>提交</button>
</form>