zoukankan      html  css  js  c++  java
  • Django文件上传

    Django 实现文件上传

    需求:实现文件上传

    1. 基础版

    代码:
    urls.py
    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        url(r'^upload.html$', views.upload),
    ]
    
    views.py
    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    import os
    def upload(request):
        if request.method == 'GET':
            return render(request,'upload.html')
        elif request.method == 'POST':
            user = request.POST.get('user')
            file = request.FILES.get('file_name')
            f = open(file.name,'wb')
            for line in file.chunks():
                f.write(line)
            f.close()
            return HttpResponse('...')
    
    upload.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/upload.html" method="POST" ENCTYPE="multipart/form-data">
            {% csrf_token %}
            <input type="text" name="user">
            <input type="file" name="file_name">
            <input type="submit" value="提交">
        </form>
    </body>
    </html>
    

      

    2. 增强版 Form上传(自定义上传按钮)

    代码:
    setting.py
    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static'),
    )
    
    urls.py
    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        url(r'^upload.html$', views.upload),
    ]
    

      

    views.py
    from django.shortcuts import render,HttpResponse
    from django.forms import fields
    from django import forms
    
    
    class UploadForm(forms.Form):
        user = fields.CharField()
        img = fields.FileField()
    
    def upload(request):
        if request.method == 'GET':
            return render(request,'upload.html')
        else:
            # obj = UploadForm(request.POST,request.FILES)
            # if obj.is_valid():
            #     user = obj.cleaned_data['user']
            #     img = obj.cleaned_data['img']
            user = request.POST.get('user')
            img  = request.FILES.get('img')
            # img是对象(文件大小,文件名称,文件内容。。。)
            print(img.name)
            print(img.size)
            f = open(img.name,'wb')
            for line in img.chunks():
                f.write(line)
            f.close()
            return HttpResponse('...')
    

      

    upload.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/upload.html" method="POST" ENCTYPE="multipart/form-data">
            {% csrf_token %}
            <input type="text" name="user" />
            <div style="position: relative">
                <a>文件上传</a>
                <input type="file" name="img" style="opacity:0;position:absolute;top:0;left:0;">
            </div>
            <input type="submit" value="提交" />
        </form>
    </body>
    </html>
    
    注:页面上大部分上传按钮都可以采用这种方式解决

    运行效果:

    3. Ajax上传文件(未完待续)

  • 相关阅读:
    条件转移指令小结
    《那些年啊,那些事——一个程序员的奋斗史》——50
    《那些年啊,那些事——一个程序员的奋斗史》——50
    《那些年啊,那些事——一个程序员的奋斗史》——51
    《那些年啊,那些事——一个程序员的奋斗史》——51
    《那些年啊,那些事——一个程序员的奋斗史》——52
    《那些年啊,那些事——一个程序员的奋斗史》——49
    《那些年啊,那些事——一个程序员的奋斗史》——51
    《那些年啊,那些事——一个程序员的奋斗史》——52
    《那些年啊,那些事——一个程序员的奋斗史》——50
  • 原文地址:https://www.cnblogs.com/desperado-ty/p/8683270.html
Copyright © 2011-2022 走看看