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中基础的socket编程实战攻略
Jun 01 Python
python list元素为tuple时的排序方法
Apr 18 Python
python使用matplotlib画饼状图
Sep 25 Python
python 重命名轴索引的方法
Nov 10 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
python 基于pygame实现俄罗斯方块
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
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
详解vue axios中文文档
2017/09/12 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
vue实现a标签点击高亮方法
2018/03/17 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
详解Python中heapq模块的用法
2016/06/28 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
NumPy排序的实现
2020/01/21 Python
python基于win32api实现键盘输入
2020/12/09 Python
英格兰足协官方商店:England Store
2019/07/12 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
党校培训自我鉴定范文
2014/03/20 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
防火标语大全
2014/10/06 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js