Django实现头像上传及修改放大查看功能的实现过程

2023-05-16

配置

1.在setting里面配置存放头像图片的文件夹及路径

# 静态路径
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),)
# 用户的头像存放路径static+/media/head_img/
MEDIA_URL = '/media/head_img/'

"""存放的头像保存最终路径为/static/media/head_img/"""

2.路由配置

# 在一级有路由后面加上以下的内容,目的是为了让能通过路由找到头像的路径,
# 不然会提示找不到图片路径
# 用户头像及图片的存放路径
+ static(settings.STATIC_URL, document_root=settings.MEDIA_URL)  

3.modles构建存放头像的表

# 该函数需要安装第三方包pillow
# static/media/head_img/上传的头像会保存在这个文件夹下面,可以根据自己的实际需求而定
# upload_to后面的文件夹会自动创建

user_head_image = models.ImageField(default='无', upload_to='static/media/head_img', verbose_name='用户头像')  

4.新建一个app,在view里面写以下内容

def user_head_img_add(request):
    """跳到用户头像信息界面"""
    if request.method == 'GET':
        user_id = request.session.get('user_id')
        user_obj = UserInfo.objects.get(user_id=user_id)
        return render(request, 'user_head_img_add.html', context={'user_obj': user_obj})

    if request.method == 'POST':
        """更新数据库表数据"""
        user_id = request.session.get('user_id')
        user_head_image = request.FILES.get('user_head_image')

        if not user_head_image:
            des = '头像不能为空,请选择头像'
            return render(request, 'user_head_img_add.html', context={'des': des})
        user_obj = UserInfo.objects.get(user_id=user_id)
        user_obj.user_head_image = user_head_image
        user_obj.save()
        des = '新增成功'
        return render(request, 'user_head_img_add_success.html', context={'des': des, 'user_obj': user_obj})

5.配置app的路由

  path('user_head_img_add/', views.user_head_img_add),  # 用户头像信息增加修改

6.user_head_img_add.html

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <link rel="icon" href="{% static '/images/favicon.ico' %}" type="image/x-icon" />
    <link rel="shortcut icon" href="{% static '/images/favicon.ico' %}" type="image/x-icon" />
    <meta charset="utf-8">
    <title>用户头像新增修改</title>
    <script src="{% static '/js/jquery.min.js' %}" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="{% static '/bootstrap/css/bootstrap.css' %}"/>
    <script src="{% static '/bootstrap/js/bootstrap.js' %}"></script>
</head>
<body style="background: url(../static/images/renlianshibie.jpg);background-size: 100%; opacity: 0.6;">
<div class="container-fluid">
    <div class="row" style="margin-top: 60px">
        <div class="col-md-3"></div>
        <div class="col-md-5">
            <form class="form" action="/accounts/user_head_img_add/" method="post" enctype="multipart/form-data" style="text-align: center;margin-top: 20px">
                {% csrf_token %}
                <div class="info">
                    <div class="card">
                        <div class="card-header">
                            <div class="card bg-info text-white">
                                <div class="title"><h4 style="text-align: center">用户头像新增修改</h4></div>
                            </div>
                        </div>
                         <div align="center">
                            <span style="color: red">{{ des }} </span>
                        </div>
                        <div class="form-group username">
                            <label>用户旧头像:</label>
                        </div>
                        <div>
                            <img src= '/{{user_obj.user_head_image}}' alt='无' width='200' height='200' align="center">
                        </div>
                        <br/>
                        <div class="form-group username">
                            <label>用户新头像:</label>
                            <input type='file' name='user_head_image' placeholder="请选择你的用户头像"/>
                        </div>
                        <div class="card-footer" style="">
                            <div class="form-group submit" style="text-align: center;">
                                <input type="submit" value="确定修改" class="btn btn-info" style="">
                            </div>
                        </div>
                        <div align="center">
                            <p class="bt"> <a href="/accounts/user_query/" class="btn btn-info" >返回用户查询</a></p>
                         </div>
                    </div>
                </div>
            </form>
        </div>
        <div class="col-md-4"></div>
    </div>
</div>
</body>
</html>

7.鼠标点击头像放大功能实现

# 1.在html的<head></head>中间增加如下内容

<script src="{% static '/js/jquery-2.1.4.min.js' %}"></script>
    <style type="text/css">
        .imgPreview {
            display: none;
            top: 0;
            left: 0;
            width: 100%; /*容器占满整个屏幕*/
            height: 100%;
            position: fixed;
            background: rgba(0, 0, 0, 0.5);
        }

        .imgPreview img {
            z-index: 100;
            width: 60%;
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
        }
        /*添加鼠标移入图片效果*/
        .img {
            cursor: pointer;
            {#url("{% static '/form/88.jpeg' %}")#}
        }
    </style>

    <script type="text/javascript">
        $(function () {
            $('.img').on('click', function () {
                var src = $(this).attr('src');
                $('.imgPreview img').attr('src', src);
                $('.imgPreview').show()
            });
            $('.imgPreview').on('click', function () {
                $('.imgPreview').hide()
            });
        })
    </script>

# 2.在<body></body>中间增加如下内容
<div class="imgPreview">
    <img src="#" alt="" id="imgPreview">
</div>

# 3.最关键的一步,在图片显示的时候要增加calss="img"
例如:
<img src= '/{{user_obj.user_head_image}}' alt='无' width='30' height='30' align="top" class="img">
# 4./一定要有,不然会找不到图片的路径,报404错误,划重点,划重点,划重点

8.头像增加修改效果图界面

 9.头像放大效果图界面

在做这个头像上传和修改的时候,踩到的坑,在写<img src='' >的时候由于没有在前面加上/,导致图片一直找不到,报404错误,头像上传过程和数据库都没有问题,图片可以正常被保存到后端文件夹,被困惑了好久,后面加上/,头像能正确显示了。

在表单一定要加上下面这行代码,不然post找不到传过来的file文件


enctype="multipart/form-data"  

找不到头像图如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django实现头像上传及修改放大查看功能的实现过程 的相关文章

随机推荐

  • OSPFv3的LSA类型抓包详解

    LSA类型 功能编码 6类不考 xff0c 不用管 8类 9类LSA是ospfv3新增的LSA Link State ID xff1a 4字节 在ospfv2和ospfv3的不同类型的LSA中代表的是什么 本地唯一的32位整数 xff1a
  • 2020年高频 redis面试真题17道(含答案和解析)

    1 什么是 redis Redis 是一个基于内存的高性能 key value 数据库 有空再补充 xff0c 有理解错误 或不足欢迎指正 2 Reids 的特点 Redis 本质上是一个 Key Value 类型的内存数据库 xff0c
  • 网络调试助手简单使用教程

    1 打开网络调试助手 xff0c 我此处使用的版本是5 0 3 xff0c 各个版本其实使用方法大同小异 2 用该软件建立一个TCP服务器 xff0c 在协议类型处选择TCP Server协议 xff0c 本机IP地址一般会默认自动填入本机
  • Docker CLI 命令详解(待完成)

    run 命令 Create and run a new container from an image 从镜像创建并运行新容器 用法 span class token function docker span run span class
  • 我在阿里做技术面试官的一些经验

    前言 我可能是在同龄人中做面试官经验比较丰富的 xff0c 在某乎实习的时候就参与了后端的技术面试 后来在阿里以及另一家公司也面试过不少候选人 xff0c 校招 社招 外包都有面试过 这里以一个面试官的角度来给大家谈谈在面试的时候怎么能给面
  • Mission Planner 一般故障描述及排除--常见地面站警示

    2 常见地面站警示 No 3D FIX 主要原因排除没有 gps 信号保证 Gps 上方无遮挡Gps 与飞控连接不正常检查接线 Compass not calibrated 主要原因排除罗盘自检失败重新上电检查罗盘未校准重新校准罗盘罗盘接线
  • Mission Planner 一般故障描述及排除--飞行中的地面站警示

    3 飞行中的地面站警示 Accels inconsistent 主要原因排除加速度计读数不一致立即手动返航降落检查 NO RC receiver 主要原因排除未接收到遥控器信号信号中断将自动触发失控保护 xff08 如果有 xff09 LO
  • IIC通信协议

    IIC通信协议 一 什么是IIC通信协议 xff1f 二 IIC协议时序分析1 空闲状态2 起始信号和停止信号3 数据传输 xff08 1 xff09 写操作 字节写 xff08 2 xff09 写操作 页写 xff08 3 xff09 读
  • 斜杠与反斜杠的区别和用法

    路径中使用斜杠 和反斜杠 的区别到底是什么 Unix使用斜杆 作为路径分隔符 xff0c 而web应用最新使用在Unix系统上面 xff0c 所以目前所有的网络地址都采用 斜杆 作为分隔符 Windows由于使用 斜杆 作为DOS命令提示符
  • 第七章 面向对象分析---建立动态模型

    建立动态模型 开发交互式系统 xff0c 动态模型非常重要 步骤 xff1a 编写典型交互行为脚本 xff08 依据用例描述 xff09 从脚本中提取事件及相关对象 xff0c 用顺序图表达确定对象状态及状态间转换关系 xff0c 用状态图
  • 几个经典问题:1)项目利益分配;2)如何提涨薪:3)老油条 的处理;4)我提离职后老板态度好了……

    问题1 xff1a 做项目的时候 xff0c 一般利益分配的比例是怎么样的 xff1f 回答 xff1a 以前在群中对于类似问题已经回答多次了 xff0c 小结一下 xff1a 1 xff09 一荣俱荣一损俱损的原则 xff1b 2 xff
  • Autoware 1.12学习整理--06--open_planner路径规划与避障

    前言 本文将在gazebo仿真环境中使用open planner完成局部路径规划与避障 xff0c open planner需要输入矢量地图 vector map xff0c 可以使用unity map toolbox绘制矢量地图 xff0
  • python3.7+cmake+dlib+face_recognition图文安装教程

    问题描述 xff1a ModuleNotFoundError No module named 39 face recognition 在安装dlib时踩坑无数 xff0c 一直安装不成功 因为dlib库都是关于python3 6的 xff0
  • 解决python opencv imshow中文乱码问题,亲测有效

    opencv imshow font 默认是只能显示英文的 xff0c 有中文就会出现乱码现象 xff0c 使用PIL的方式绘制文字 xff0c 绘制好之后再以opencv的图片类型返回去 xff0c 在使用imshow就可也解决乱码问题了
  • 在虚拟机中安装Ubuntu 18.04图文教程

    安装前的准备 xff1a 操作系统 xff1a Win10 X64 虚拟机版本 xff1a VMware Workstation 16 Pro ubuntu版本 xff1a ubuntu 18 04 desktop amd64 1 启动VM
  • docker redis连接被拒绝的解决办法

    修改redis的配置 xff1a 修改配置后建议重新启动redis service redis server restart bind 127 0 0 1 xff1a 允许访问机器的IP xff0c 默认只有本机才能访问 xff0c 你可以
  • conda:未找到命令

    下载 wget c https repo continuum io miniconda Miniconda3 latest Linux x86 64 sh wget c https repo anaconda com archive Ana
  • Numpy和Pandas基础用法

    Numpy基础 numpy的array创建 numpy属性 numpy的基础运算 numpy的索引 numpy的array合并 numpy的array分割 numpy的拷贝与深拷贝 Pandas基础 DataFrame基本介绍 pandas
  • Python--dlib图文安装教程

    1 指定版本 xff0c 适用于python3 6版本的 pip install dlib 61 61 19 6 1 2 下载后离线安装 Python3 6版本 下载文件 xff1a dlib 19 6 0 cp36 cp36m win a
  • Django实现头像上传及修改放大查看功能的实现过程

    配置 1 在setting里面配置存放头像图片的文件夹及路径 静态路径 STATIC URL 61 39 static 39 STATICFILES DIRS 61 os path join BASE DIR 39 static 39 用户