• Django 前台上传以及显示图片


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



  • 相关阅读:
    【原】为什么选择iPhone5的分辨率作为H5视觉稿尺寸
    js 进制转换
    抓包 抓nodejs的包 抓浏览器的包 抓手机的包
    nginx 安装 ssl 证书
    github 被强了!太丧心病狂了!
    yandex 图片自动下载
    如何获取命令行的原始参数?
    npm 加速之 yarn cnpm pnpm
    json 格式化处理工具
    两分钟观看 nodejs、 iojs、 npmjs 之间的狗血剧情
  • 原文地址:https://www.cnblogs.com/tingxin/p/12939398.html
Copyright © 2020-2023  润新知