当前位置: 首页 > news >正文

django图片上传

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'),
http://www.jsqmd.com/news/1177992/

相关文章:

  • 2026遵义漏水检测维修口碑榜TOP5权威推荐:正规防水补漏公司甄选-卫生间/厨房/阳台/屋顶/地下室渗漏水精准查漏:房屋防水补漏避坑指南 - 安佳防水
  • C++学习(9):继承与多态-auto、引用、const变量和const函数
  • Node-RED 3.0+ 树莓派 5 部署:一键脚本 vs apt 安装,3 种方案性能实测
  • 多维聚合实战:SQL/Pandas/DAX三维引擎精要
  • 多维聚合中的数据操纵:维度编织、指标熔炼与聚合编排
  • 医疗诊断 vs 欺诈检测:3个场景解析Precision与Recall的权衡策略
  • 银行级多维聚合实战:从pandas agg到生产级数据资产
  • 终极免费直播录制神器:StreamCap如何解决你的内容错过焦虑
  • 2026年7月最新嘉兴浪琴官方售后客服服务电话及地址网点大全 - 浪琴官方售后服务中心
  • 过敏急救面膜哪家性价比高:蜜妙诗常备优选 - MXyuyu
  • 【嘉立创】制作蓝牙天线元器件及封装,自定义多边形禁止铺铜区。
  • LinkSwift:一键解锁九大网盘下载权限的终极解决方案
  • 2026年家具行业 AI 工具使用常见问题解答(FAQ)
  • SQL Server Management Studio 18.0 调试权限配置:3步解决‘无法启动调试器’报错
  • Ubuntu下arecord与aplay音频闭环实战指南
  • AEUX终极指南:3分钟学会从Figma/Sketch到After Effects的无缝动画转换
  • 2026年7月浙江铝合金压铸件表面处理/宁波铝合金压铸件灯具厂家选择指南_宁波市鄞州来顺金属制品有限公司 - 品牌宣传支持者
  • ChatGPT Work带来了什么?
  • 终极指南:使用DDrawCompat让经典游戏在Windows 10/11上完美运行
  • 2026年7月惠州储能模块电源ATE测试设备/快充适配器电源ATE测试设备选厂综合指南_扶光科技(惠州)有限公司 - 品牌宣传支持者
  • 2026年7月最新青岛欧米茄官方售后客服中心地址电话及服务网点分布 - 欧米茄官方服务中心
  • BetterJoy:三步搞定Switch控制器在PC上的完美体验
  • Day14 --【Java全栈】 面向对象编程[2]封装
  • 2025年C++ GUI框架终极对比:Qt、wxWidgets、ImGui、FLTK、JUCE选型指南
  • AI投资Agent技术解析:从LLM原理到金融实战应用
  • Unity InputField onEndEdit事件优化:区分回车提交与失焦的跨平台解决方案
  • 多维聚合的五种模式:从SQL到pandas的业务落地指南
  • 2026年7月宁波铝合金压铸件抛光电镀/宁波铝合金压铸件底座供应商优选法_宁波市鄞州来顺金属制品有限公司 - 行业平台推荐
  • 快慢指针法深度解析:解决链表环、中点、倒数第K节点3类问题的统一思路
  • Waifu2x-Extension-GUI终极指南:一站式AI媒体增强解决方案