首页 > Web开发 > 详细

Django 前台上传以及显示图片

时间:2020-05-22 20:49:22      阅读:62      评论:0      收藏:0      [点我收藏+]

前台上传图片
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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!