• 文件上传及数据保存


    文件上传及数据保存

    通过form表单和 Ajax 形式上传文件

    1.urls.py路由配置

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),
    ]
    
    

    2.模板index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
        <script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
    </head>
    <body>
    
    <form action="/index/" method="post" enctype="multipart/form-data">    {# 发送图片是需要enctype="multipart/form-data" 参数  #}
        {% csrf_token %}
        <p><input type="text" name="user" id="user"></p>
        <p><input type="file" name="file" id="file"></p>
        <input type="submit">
    </form>
    <input type="button" value="ajax提交" id="buttn">
    
    <script>
        $("#buttn").click(function () {
            // 实例化一个对象 使用 new FormData()
            var formdata=new FormData();
            formdata.append("username",$("#user").val());          // username 为 key ,$("#user").val() 为值;将键值对追加到 formdata中
            formdata.append("imgFile",$("#file")[0].files[0]);     // 获取的 二进制文件
    
            $.ajax({
                url:"/index/",
                headers:{"X-CSRFToken":$.cookie('csrftoken')},
                type:"POST",
                data:formdata,
                processData:false,      // 数据是否做预处理    (传文件时需要设置)
                contentType:false,      // 编码类型          (传文件时需要设置)
                success:function (data) {
                    console.log(data)
                }
            })
        })
    </script>
    </body>
    </html>
    

    3.views.py 视图函数

    from django.shortcuts import render,HttpResponse,redirect
    
    # Create your views here.
    def index(request):
        if request.is_ajax():
            print("====", request.POST)         # 获取提交的  数据内容
            print(request.FILES)                     # 获取提交的  文件内容
    
            file_obj = request.FILES.get("imgFile")   # imgFile 是在模板中 的 key
            with open(file_obj.name,"wb") as f:         # 打开一个文件将 拿到的 file_obj 写入到该文件中
                for line in file_obj:
                    f.write(line)
            return HttpResponse("Ajax")
    
        # 通过form 表单的形式传送文件
        if request.method=="POST":
            # request.POST.get
            print(request.POST)
            print(request.FILES)       # 图片传送过来会放在 该方法中 Files
    
            file_obj = request.FILES.get("imgFile")
            print(file_obj.name)        # file_obj.name 用来获取文件的名字
    
            with open(file_obj.name,"wb") as f:         # 打开一个文件将 拿到的 file_obj 写入到该文件中
                for line in file_obj:
                    f.write(line)
    
            return HttpResponse("OK")
        return render(request,"index.html")
    
  • 相关阅读:
    html和css基础
    Chrome的插件使用
    04
    03
    MySQL的下载与安装(超完整)
    IDEA运行单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    IDEA 快捷键合集
    IDEA + Spring的安装以及入门案例创建(超详细)
    Java NullPointerException异常的原因
    Eclipse 显示 错误:找不到或无法加载主类
  • 原文地址:https://www.cnblogs.com/baolin2200/p/8032279.html
Copyright © 2020-2023  润新知