Django实现前台上传并显示图片功能

作者:--TINGXIN-- 时间:2022-04-05 19:49:39 

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')

Django实现后台上传并显示图片功能

来源:https://www.cnblogs.com/tingxin/p/12939398.html

标签:Django,前台,上传,图片
0
投稿

猜你喜欢

  • js 操作cookie的教程

    2008-03-05 13:08:00
  • 关于Python中字符串的各种操作

    2022-06-25 16:18:38
  • 用python实现一个简单计算器(完整DEMO)

    2023-11-10 11:03:48
  • 简单瞅瞅Python vars()内置函数的实现

    2021-03-29 20:41:05
  • 一些与网页密切相关的技术

    2010-09-05 21:16:00
  • Javascript 小游戏,“是男人坚持 100 次”

    2009-01-22 14:25:00
  • Django与JS交互的示例代码

    2023-05-03 13:38:58
  • ASP制作中使用MYSQL的分析

    2008-10-13 09:25:00
  • python批量从es取数据的方法(文档数超过10000)

    2022-03-23 01:21:48
  • 关于Python的高级数据结构与算法

    2023-12-22 00:29:40
  • python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法

    2021-01-03 05:25:29
  • 解决django接口无法通过ip进行访问的问题

    2023-09-15 14:07:27
  • python中的文件打开与关闭操作命令介绍

    2021-07-05 10:15:39
  • python 多线程中子线程和主线程相互通信方法

    2021-05-13 03:56:44
  • Python中endswith()函数的基本使用

    2022-06-05 04:01:34
  • Python3.5集合及其常见运算实例详解

    2023-04-25 04:04:33
  • Oracle SQL中实现indexOf和lastIndexOf功能的思路及代码

    2023-07-14 10:26:52
  • Python应用库大全总结

    2023-05-14 01:57:19
  • Python实现轻松切割MP3文件

    2023-09-23 21:40:32
  • PHP实现判断二叉树是否对称的方法

    2023-06-28 13:24:10
  • asp之家 网络编程 m.aspxhome.com