尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

django图片上传

django图片上传
📅 发布时间:2026/7/13 3:25:03

settings.py中配置

MEDIA_ROOT=os.path.join(BASE_DIR,'media') MEDIA_URL="/media/"

model中配制

avatar=models.CharField(verbose_name="头像",null=True,blank=True,max_length=128)

视图中

@csrf_exempt def image_add(request): image_object=request.FILES['avatar'] image_address=str(image_object.name).split('.')[-1] image_address_write=['png','jpg'] if image_address not in image_address_write: return JsonResponse({"status": False, "error": '请上传正确的图片格式'}) image_name=request.session["info"]["username"]+'.png' file_path = os.path.join('media/avatar/',image_name) with open(file_path,'wb') as image_file: for chunk in image_object.chunks(): image_file.write(chunk) admin_app.models.UserInfo.objects.filter(id=request.session['info']['id']).update(avatar=file_path) return JsonResponse({"status":True})

路由

path("image/add/", percenter.image_add, name="image_add"),

前端 用ajax上传

{% extends "layout_index/layout_index.html" %} {% load static %} {% block css %} <link rel="stylesheet" href="{% static 'utils/css/perfile.css' %}"> {% endblock %} {% block content %} <div class="crm-profile-wrapper"> <!-- ✅ 主卡片 --> <div class="crm-profile-card"> <!-- 左侧:头像上传 --> <div class="crm-profile-avatar"> <div class="crm-avatar-box" onclick="document.getElementById('crmAvatar').click()"> 👤 </div> <p class="crm-avatar-hint">点击上传头像<br>JPG / PNG · 最大 2MB</p> <form id="formImage" enctype="multipart/form-data"> <input type="file" id="crmAvatar" name="avatar" accept="image/jpeg,image/png" style="display:none" > <button type="button" class="crm-form-btn" style="width:130px;" onclick="submitAvatar()"> 上传头像 </button> </form> </div> <!-- 右侧:修改密码 --> <div class="crm-profile-forms"> <div> <h2 class="crm-section-title">修改密码</h2> <p class="crm-section-desc">定期更换密码有助于保护账号安全</p> </div> <form id="per-form-data"> {% for item in form %} <div class="crm-form-group"> <label>{{ item.label }}</label> {{ item }} <span style="color: red"></span> </div> {% endfor %} </form> <button class="crm-form-btn" id="confirepwd"> 保存密码 </button> </div> </div> </div> {% endblock %} {% block js %} <script> submitPassword(); document.getElementById("crmAvatar").addEventListener("change", function (e) { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = function (ev) { const avatarBox = document.querySelector(".crm-avatar-box"); // 如果已经有 img,直接换 src let img = avatarBox.querySelector("img"); if (!img) { avatarBox.innerHTML = ""; img = document.createElement("img"); img.style.width = "100%"; img.style.height = "100%"; img.style.objectFit = "cover"; img.style.borderRadius = "50%"; avatarBox.appendChild(img); } img.src = ev.target.result; }; reader.readAsDataURL(file); }); /* ===== 表单提交(示例) ===== */ function submitAvatar() { {#e.preventDefault();#} {#alert("头像已准备好,可在此处 fetch 上传");#} let formData = new FormData($("#formImage")[0]) $.ajax({ url: "/image/add/", type: "post", data: formData, dataType: "JSON", {# 禁止jquery自动设置请求头信息 #} contentType:false, {# 禁止jquery自动处理数据 #} processData:false, {# 禁用浏览器缓存 #} cache:false, success:function (res){ if(res.status){ alert('上传成功') }else{ alert(res.error) } } }) } function submitPassword() { $('#confirepwd').click(function () { $.ajax({ url:"/modify/percenter/", type:"post", data:$("#per-form-data").serialize(), dataType:"JSON", success: function (res) { alert(res.status) if (res.status){ alert("修改成功") //location.reload() }else { $.each(res.error, function (name, date) { $("#id_"+name).next().text(date[0]) }) } } }) }) } </script> {% endblock %}

可以访问一定先要配置settings

然后在总路由中配置路由

re_path(r'^media/(?P<path>.*)$',serve,{'document_root':settings.MEDIA_ROOT},name='media'),

相关新闻

  • 【嘉立创】制作蓝牙天线元器件及封装,自定义多边形禁止铺铜区。
  • Ubuntu下arecord与aplay音频闭环实战指南
  • AEUX终极指南:3分钟学会从Figma/Sketch到After Effects的无缝动画转换

最新新闻

  • 01 | 为什么先规划学习路径
  • P2P 金融系统银行存管对接:万信金融 3 种分布式事务方案对比与选型
  • Kali Linux中文渗透测试环境搭建:ibus输入法深度配置与避坑指南
  • AI代码助手四代演进:从语法补全到自主开发的进化之路
  • 《鸣潮》3.5版本「遗音扶剑,荡梦而歌」上线 UU远程云电脑助力低配置设备畅玩
  • Unity UI Toolkit实战:从零构建可交互计数器,掌握数据绑定与响应式UI

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号