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 生成不重复的随机数的代码
May 15 Python
Python抽象类的新写法
Jun 18 Python
Python的Django框架下管理站点的基本方法
Jul 17 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
利用python画一颗心的方法示例
Jan 31 Python
python实现Adapter模式实例代码
Feb 09 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Python调用Windows命令打印文件
Feb 07 Python
python playwright 自动等待和断言详解
Nov 27 Python
python_tkinter弹出对话框创建
Mar 20 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
用户的详细注册和判断
2006/10/09 PHP
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
PHP 防注入函数(格式化数据)
2011/08/08 PHP
php eval函数一句话木马代码
2015/05/21 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
wxPython框架类和面板类的使用实例
2014/09/28 Python
python 实时遍历日志文件
2016/04/12 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
如何基于python生成list的所有的子集
2019/11/11 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
工程资料员岗位职责
2015/04/13 职场文书
幽默导游词开场白
2015/05/29 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js