Django项目文件上传

前后端不分离模式下的文件上传
1.在setting.py文件中templetes模块配置以下内容
#使用媒体文件 上传的文件
'django.template.context_processors.media'
2.引用seting.py文件中的MEDIA_URL
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')
<li><span>用户头像:</span><img src="{{ MEDIA_URL }}{{ user.icon }}"</li>
3.本地上传
有form:
   <form action='' method='post' enctype="multipart/form-data">
      <input type="hidden" name="uid" value= {{ user.id }}>
      {% csrf_token %}
      <li><span>用户头像:</span><img src="{{ MEDIA_URL }}{{ user.icon }}" alt="" id="user_icon">
          <input type='submit' value='修改头像' onclick='javascript:$("#hiddenFile").click();'/>
          <input id='hiddenFile' type='file' style="display:none" onchange='change_icon();'/>
      </li>
        </form>

无form:
    <li><span>用户头像:</span><img src="{{ MEDIA_URL }}{{ user.icon }}" alt="" id="user_icon">
        <input type='button' value='修改头像' onclick='javascript:$("#hiddenFile").click();'/>
        {% csrf_token %}
        <input id='hiddenFile' type='file' style="display:none" onchange='change_icon();'/>
    </li>
利用Ajax上传头像
{% block myjs %}
    <script>
        function change_icon() {

            {#// 构建form表单 采用无form表单时使用#}
            {#var form = new FormData();#}
            {#form.append('uid', {{ user.id }});#}
            {#form.append('icon', $("#hiddenFile")[0].files[0]);#}
            {#csrf = $('input[name="csrfmiddlewaretoken"]').val();#}
            {#form.append('csrfmiddlewaretoken', csrf);#}


            $.ajax({
                url: '{% url 'user:modify_icon' %}',
                type: 'POST',
                dataType: 'json',
                data: form,
                contentType: false,  //---》 是否添加Content-Type请求头
                processData: false,  //-- -》 enctype的值不进行编码     multipart / form - data
                success: function (data) {
                    console.log(data);
                    if (data.msg == 'ok') {
                        $('#user_icon').attr('src', '{{ MEDIA_URL }}' + data.image);
                    }
                }
                ,
                error: function (data) {
                    console.log(data);
                }
            })
            ;
        }
    </script>
{% endblock %}
后端接收
#此场景为上传头像,图片保存在用户模型icon字段中 
# 修改图片
def modify_icon(request):
    if request.method == 'POST':
        # icon = request.POST.get('')
        uid = request.POST.get('uid')
        icon = request.FILES.get('icon')  # - ----> 所有文件上传的内容都必须通过request.FILEs
        user = User.objects.get(pk=uid)
        user.icon = icon  # - ---> models     icon = models.ImageFiled()
        user.save()
        return JsonResponse({'msg': 'ok', 'image': str(user.icon)})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值