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实现在目录中查找指定文件的方法
Nov 11 Python
Python字典操作简明总结
Apr 13 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python如何对实例属性进行类型检查
Mar 20 Python
Django 使用logging打印日志的实例
Apr 28 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
python 将Excel转Word的示例
Mar 02 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
Vue程序调试的方法
2019/06/17 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
python求最大值最小值方法总结
2019/06/25 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
务虚会发言材料
2014/12/25 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python