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 18 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
Python分支结构(switch)操作简介
Jan 17 Python
Python实现基于POS算法的区块链
Aug 07 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python多线程http压力测试脚本
Jun 25 Python
python监控nginx端口和进程状态
Sep 06 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
Django drf请求模块源码解析
Jun 08 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
Jun 09 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 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
PHP引用的调用方法分析
2016/04/25 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
Angular2库初探
2017/03/01 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
python实现决策树分类算法
2017/12/21 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
pandas 选择某几列的方法
2018/07/03 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
工地标语大全
2014/06/18 职场文书
股指期货心得体会
2014/09/10 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
redis内存空间效率问题的深入探究
2021/05/17 Redis