Django的Web开发 的文件上传(图片等)

原生文件上传,

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值