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 相关文章推荐
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
使用Python实现windows下的抓包与解析
Jan 15 Python
python用户管理系统
Mar 13 Python
Python实现的个人所得税计算器示例
Jun 01 Python
python实现汉诺塔算法
Mar 01 Python
python判断完全平方数的方法
Nov 13 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
基于tensorflow权重文件的解读
May 26 Python
Python正则表达式中flags参数的实例详解
Apr 01 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 引用是个坏习惯
2010/03/12 PHP
php 无法载入mysql扩展
2010/03/12 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
javascript 函数式编程
2007/08/16 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
Python 如何提高元组的可读性
2019/08/26 Python
大学本科生的个人自我评价
2013/12/09 职场文书
人事部主管岗位职责
2013/12/26 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python