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正则匹配抓取豆瓣电影链接和评论代码分享
Dec 27 Python
python以环状形式组合排列图片并输出的方法
Mar 17 Python
python使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
Python文件处理
Feb 29 Python
剖析Python的Twisted框架的核心特性
May 25 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
详解python中各种文件打开模式
Jan 19 Python
python实现引用其他路径包里面的模块
Mar 09 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 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
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
fastclick插件导致日期(input[type=&quot;date&quot;])控件无法被触发该如何解决
2015/11/09 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
python银行系统实现源码
2019/10/25 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
30岁生日感言
2014/01/25 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python