python3 django layui文件/图片上传实例

首先网上真的没有这方面的文章,用flask框架的可以看看这篇
https://fly.layui.com/jie/21522/
首先讲一下后台怎么获取到layui upload上传的文件

image.png

为什么get的(‘file’)这个,这时候我们打开浏览器上传完图片点击提交的时候,按F12点network,左侧找到你的方法名称,headers拉到底就能看到类似这样的,提交的from data里面有个file这个参数(此参数就是你上传的图片,layui可以用这个参数更改field:'任意',)详情的话点击上面的view source
image.png

好了不多说了,干货--->

setting.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')  # media即为图片上传的根路径
MEDIA_URL = '/media/'

base.html(看不懂base.html的,我也救不了)

{% load static from staticfiles %}
<!DOCTYPE HTML>
<html>
<head>

    {% block title %}
        <title>基础页</title>
    {% endblock %}
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="keywords" content="Movie_store Responsive web template, Bootstrap Web Templates, Flat Web Templates, Andriod Compatible web template,
Smartphone Compatible web template, free webdesigns for Nokia, Samsung, LG, SonyErricsson, Motorola web design"/>

    <!-- 引入样式 -->


    <link rel="stylesheet" href="{% static 'css/layui.css' %}" media="all" type="text/css">

    <link rel="stylesheet" href="{% static 'css/laydate.css' %}" type="text/css">
    <link rel="stylesheet" href="{% static 'css/code.css' %}" type="text/css">
    <!-- 先引入 jquery -->
    <script type="text/javascript" src="{% static 'js/jquery-1.4.4.min.js' %}"></script>

    <script type="text/javascript" src="{% static 'js/layui.js' %}"></script>
    <script type="text/javascript" src="{% static 'js/layui.all.js' %}"></script>


    <!-- 页面引入css -->
    {% block styles %}
    {% endblock %}

</head>
<body class="layui-layout-body">
<!-- 页面头部 -->
{% block head %}
{% endblock %}
<!-- 页面中部 -->
{% block body %}
{% endblock %}
<!-- 页面底部 -->
{% block fooder %}
{% endblock %}
<!-- 页面引入js -->
{% block scripts %}
{% endblock %}
</body>
</html>

test.html

{% extends 'base.html' %}
{% load static from staticfiles %}
{% block styles %}
    <style>
        .imgbos {
            width: 200px;
            height: 200px;
            border: 3px solid #0099CC;
            border-radius: 5px;
            padding: 3px;
            text-align: center;
            display: flex;
            align-items: center
        }

        .imgbos img {
            max-width: 200px;
            max-height: 200px;
            margin: auto
        }
    </style>
{% endblock %}
{% block body %}
    <form class="layui-form">
        {% csrf_token %}{# 随机码 #}
        <div class="layui-form-item">
            <label class="layui-form-label">名称</label>
            <div class="layui-input-block">
                <input type="text" name="img_name" required lay-verify="required" placeholder="请输入尾灯名称"
                       class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-input-block">
                <button type="button" class="layui-btn" id="upload">
                    <i class="layui-icon">&#xe67c;</i>上传图片
                </button>
                <br><br>
                <div class="imgbos">
                    <img id="preview" title="">
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-input-block">
                <button class="layui-btn" id="commit" onclick="return false">立即提交</button>
            </div>
        </div>
    </form>
{% endblock %}

{% block scripts %}
    <script>
        layui.use(['form', 'layer', 'upload'], function () {
            var layer = layui.layer;
            var upload = layui.upload;
            var $ = layui.jquery;
            var img_url = ''
            upload.render({
                elem: '#upload', //上传图标
                url: '{{ path }}/test',
                auto: false,//选择文件后不自动上传
                bindAction: '#commit',
                size: 20000,
                //上传前的回调
                before: function (obj) {
                    this.data = {
                        img_name: $('input[name="img_name"]').val(),
                        csrfmiddlewaretoken: '{{ csrf_token  }}'
                    }
                },
                //选择文件后的回调
                choose: function (obj) {
                    obj.preview(function (index, file, result) {
                        console.log(file.name)
                        $('#preview').attr('src', result);
                        $('#preview').attr('title', file.name);
                    })
                },
                //操作成功的回调
                done: function (res, index, upload) {
                    var code = res.code === 0 ? 1 : 2;
                    layer.alert(res.msg, {icon: code}, function () {
                        parent.window.location.reload();
                    })
                    console.log(res)
                },
                //上传错误回调
                error: function (res, index, upload) {
                    layer.alert('上传失败!' + res);
                }
            });
        })
    </script>
{% endblock %}

views.py


from sysmanage.models import Test 
from django.http import JsonResponse

@csrf_protect
def test(request):
    path = request.scheme + "://" + request.get_host()  # url
    ff_path = request.scheme + "://" + request.get_host() + request.path  # 加方法url
    if request.method == 'GET':
        return render(request, "test.html", {'ff_path': ff_path, 'path': path, })
    else:
        img_name = request.POST.get('img_name')
        img_url = request.FILES.get('file')
        print(img_url)
        img = Test(img_name=img_name, img_url=img_url)
        img.save()
        response_data = {"info": "成功更新角色编辑按钮"}
        return JsonResponse(response_data)

urls.py

from django.urls import path
from #自己的app名称 import views
    path('test', views.test),  # 测试页面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容