Django实现前台上传并显示图片功能


Posted in Python onMay 29, 2020

1. 前台

templates/upload/upload.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="/myupload/upload/" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  名字:<input type="text" name="name"><br>
  头像:<input type="file" name="avator"><br>
  <input type="submit" value="提交">
</form>
</body>
</html>

2. 项目设定

settings.py

#添加

ALLOW_UPLOAD = ['jpg', 'png', 'jpeg']

3.app设定

urls.py

from django.contrib import admin
from django.urls import path, register_converter, re_path
from . import views

urlpatterns = [
  path('', views.index, name='index'), # 上传首页
  path('upload/', views.upload), # 上传图片
]

views.py

from django.shortcuts import render
from .models import User,Article
from django.http import HttpResponse
from django.conf import settings
from datetime import datetime
import os
from django.shortcuts import redirect, reverse
import hashlib

# Create your views here.
def index(request):
  users = User.objects.all()
  article = Article.objects.all()
  return render(request, 'myupload/index.html', locals())


def upload(request):
  if request.method == 'GET':
    return render(request, 'myupload/upload.html')
  else:
    name = request.POST.get('name')
    pic = request.FILES.get('avator')

    media_root = settings.MEDIA_ROOT # media
    allow_upload = settings.ALLOW_UPLOAD # ALLOW_UPLOAD
    # path = 'upload/{}/{}/{}/'.format(datetime.now().year, datetime.now().month, datetime.now().day)
    '{:02d}'.format
    path = 'upload/{}/{}/{}/'.format(datetime.now().year,'{:02d}'.format(datetime.now().month), '{:02d}'.format(datetime.now().day))
    full_path = media_root + '/' + path

    # full_path = 'media/upload/2019/12/20'
    if not os.path.exists(full_path): # 判断路径是否存在
      os.makedirs(full_path) # 创建此路径

    # 要不要改图片的名字 生成hash
    # 这块要不要判断图片类型 .jpg .png .jpeg
    # '/../../../myviews/setting.py'
    print(pic)
    print(full_path)
    print(full_path+pic.name)
    if pic.name.split('.')[-1] not in allow_upload:
      return HttpResponse('fail')

    with open(full_path + '/' + pic.name, 'wb') as f:
      for c in pic.chunks(): # 相当于切片
        f.write(c)

    User.objects.create(name=name, avator=path + pic.name)
    return redirect('myupload:index')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
python实现txt文件格式转换为arff格式
May 31 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
python+opencv实现高斯平滑滤波
Jul 21 Python
python numpy实现文件存取的示例代码
May 26 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
浅析Python 条件控制语句
Jul 15 Python
python实现定时发送邮件
Dec 23 Python
Python实现智慧校园自动评教全新版
Jun 18 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 #Python
Django实现后台上传并显示图片功能
May 29 #Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 #Python
Python基于smtplib模块发送邮件代码实例
May 29 #Python
Django通过json格式收集主机信息
May 29 #Python
Python小白不正确的使用类变量实例
May 29 #Python
python小白切忌乱用表达式
May 29 #Python
You might like
php命令行用法入门实例教程
2014/10/27 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
微信自定义分享php代码分析
2016/11/24 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
详解webpack babel的配置
2018/01/09 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
Python中基本的日期时间处理的学习教程
2015/10/16 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
python多线程同步之文件读写控制
2021/02/25 Python
如何卸载python插件
2020/07/08 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
如何开发一个JQuery插件
2016/07/28 面试题
大学生职业规划前言模板
2013/12/27 职场文书
人事专员的职责
2014/02/26 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
财务出纳岗位职责
2015/03/31 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记