Django之上传文件

Django之上传文件

  最简单的文件上传方式:

  后端代码:   

def f1(request):
    if request.method == "GET":
        return render(request,"f1.html")
    else:
        import os
        print(request.FILES)  #这里是文件的数据   request.POST 是取文本的数据
        file_obj = request.FILES.get("fafafa")   #获取用户上传的文件
        print(file_obj.name)  #文件名
        print(file_obj.size)  #文件大小
        f = open(os.path.join("static",file_obj.name),"wb")
        for chunk in file_obj.chunks():
            f.write(chunk)
        f.close()
        return render(request,"f1.html")

  前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post" action="/f1/" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="fafafa">
        <input type="submit" value="提交">
    </form>
</body>
</html>

  基于Form验证的文件操作:

    后端操作:

class F2Form(Form):
    user = fields.CharField()
    fafafa = fields.FileField()

def f2(request):
    """
    文件上传
    :param request:
    :return:
    """
    if request.method == "GET":
        obj = F2Form()
        return render(request,"f2.html",{"obj":obj})
    else:
        obj = F2Form(data=request.POST,files=request.FILES)
        if obj.is_valid():
            print(obj.cleaned_data.get("fafafa").name) #拿文件名
            print(obj.cleaned_data.get("fafafa").size) #拿文件大小
        return render(request,"f2.html",{"obj":obj})

    前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post" action="/f2/" enctype="multipart/form-data">
        {% csrf_token %}
        {{ obj.user }}
        {{ obj.fafafa }}
        <input type="submit" value="提交">
    </form>
</body>
</html>

   Ajax 的上传文件:

    1.XMLHttpResponse方式:

    后端:

import os
def upload(request):
    if  request.method == "GET":
        return render(request,'upload.html')
    else:
        print(request.POST,request.FILES)
        file_obj = request.FILES.get('fafafa')
        file_path = os.path.join("static",file_obj.name)
        with open(file_path,'wb') as f:
            for chunk in file_obj.chunks():
                f.write(chunk)
        return HttpResponse(file_path)

    前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>原生Ajax上传文件</h1>
    <input type="file" id="i1" />
    <a οnclick="upload1();">上传</a>
    <div id="container1"></div> //存放路径
    
    <script src="/static/jquery-1.12.4.js"></script>
    <script>
        function upload1(){
            var formData = new FormData(); //FormData能传文件,能传字符串
            formData.append('k1','v1');
            formData.append('fafafa',document.getElementById('i1').files[0]);

            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    var  file_path = xhr.responseText;
                    var tag = document.createElement('img');
                    tag.src = "/"+ file_path;
                    document.getElementById('container1').appendChild(tag); //存放路径
                }
            };
            xhr.open('POST','/upload/');
            xhr.send(formData);
        }
    </script>
</body>
</html>

 

    2.jQuery Ajax方式:

    前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>    
    <h1>jQuery Ajax上传文件</h1>
    <input type="file" id="i2" />
    <a οnclick="upload2();">上传</a>
    <div id="container2"></div> //存放路径

    <script src="/static/jquery-1.12.4.js"></script>
    <script>
        function upload2(){
            var formData = new FormData();
            formData.append('k1','v1');
            // formData.append('fafafa',document.getElementById('i1').files[0]);
            formData.append('fafafa',$('#i2')[0].files[0]);
            // $('#i2') -> $('#i2')[0]
            // document.getElementById('i1') -> $(document.getElementById('i1'))

            $.ajax({
                url: '/upload/',
                type: 'POST',
                data: formData,
                contentType:false,
                processData:false,
                success:function(arg){
                    var tag = document.createElement('img');
                    tag.src = "/"+ arg;
                    $('#container2').append(tag);
                }
            })
        }
    </script>
</body>
</html>

 

    3.伪Ajax方式:

    前端:伪Ajax上传解决了浏览器低版本问题,应用了iframe提交form表单不刷新页面的特点。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>伪 Ajax上传文件</h1>
    <form id="f1" method="POST" action="/upload/" target="ifr" enctype="multipart/form-data">
        <iframe id="ifr" name="ifr" style="display: none"></iframe>
        <input type="file" name="fafafa" />
        <a οnclick="upload3();">上传</a>
    </form>
    <div id="container3"></div>

    <script src="/static/jquery-1.12.4.js"></script>
    <script>
        function upload3(){
            document.getElementById('ifr').onload = loadIframe;
            document.getElementById('f1').submit();
        }

        function loadIframe(){
            var content = document.getElementById('ifr').contentWindow.document.body.innerText;
            var tag = document.createElement('img');
            tag.src = "/"+ content;
            $('#container3').append(tag);
        }
    </script>
</body>
</html>

 

----- END ------

转载于:https://www.cnblogs.com/george92/p/11481530.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个优秀的Web框架,可以帮助开发者快速构建Web应用程序。但是,当我们需要将Django应用程序部署到生产环境时,我们需要考虑很多方面,例如性能、安全、可靠性等。本文将介绍如何使用Gunicorn和Nginx将Django应用程序部署到生产环境中。 ## 准备工作 在开始之前,我们需要在服务器上安装一些必要的软件包和库。 ### 安装Python和pip 首先,我们需要在服务器上安装Python和pip。如果您已经安装了它们,请跳过此步骤。 ```shell # Ubuntu sudo apt-get update sudo apt-get install python3 python3-pip # CentOS sudo yum update sudo yum install python3 python3-pip ``` ### 创建虚拟环境 为了避免与其他Python应用程序的依赖项冲突,我们建议在服务器上使用虚拟环境。在此过程中,我们将使用venv创建一个虚拟环境。 ```shell python3 -m venv myenv source myenv/bin/activate ``` ### 安装Django和Gunicorn 一旦我们进入虚拟环境,我们可以使用pip安装Django和Gunicorn。 ```shell pip install django gunicorn ``` ## 配置Gunicorn Gunicorn是一个Python WSGI HTTP服务器,可以处理Django应用程序的并发请求。下面是如何配置Gunicorn。 ### 创建Gunicorn配置文件 我们可以为Gunicorn创建一个配置文件。在此过程中,我们将创建一个名为`gunicorn_config.py`的文件。 ```python bind = "127.0.0.1:8000" workers = 3 user = "myuser" ``` 在这个配置文件中,我们定义了以下几个参数: - `bind`:指定Gunicorn绑定的IP地址和端口号。 - `workers`:指定Gunicorn启动的工作进程数。 - `user`:指定Gunicorn运行的用户。 请注意,我们将Gunicorn绑定到`127.0.0.1`地址,这意味着它只能在本地访问。如果您想让Gunicorn在公共IP地址上运行,请使用`0.0.0.0`。 ### 启动Gunicorn 一旦我们创建了配置文件,我们可以使用以下命令启动Gunicorn。 ```shell gunicorn myproject.wsgi:application -c gunicorn_config.py ``` 在这个命令中,我们指定了Django的WSGI入口点`myproject.wsgi:application`,以及Gunicorn配置文件`gunicorn_config.py`。 ## 配置Nginx 现在我们已经成功启动了Gunicorn,我们需要将Nginx配置为反向代理,以便客户端可以通过Nginx访问我们的应用程序。 ### 安装Nginx 如果您还没有安装Nginx,请按照以下步骤进行安装。 ```shell # Ubuntu sudo apt-get update sudo apt-get install nginx # CentOS sudo yum update sudo yum install nginx ``` ### 创建Nginx配置文件 我们需要为Nginx创建一个配置文件。在此过程中,我们将创建一个名为`myproject.conf`的文件。 ```nginx server { listen 80; server_name example.com; access_log /var/log/nginx/access.log; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 在这个配置文件中,我们定义了以下几个参数: - `listen`:指定Nginx监听的端口号。 - `server_name`:指定Nginx的域名。 - `access_log`:指定Nginx的访问日志路径。 - `location`:指定Nginx的URL匹配规则和反向代理设置。 请注意,我们将Nginx绑定到`example.com`域名,并将所有请求转发到Gunicorn运行的`127.0.0.1:8000`地址。 ### 重启Nginx 一旦我们创建了配置文件,我们可以使用以下命令重新启动Nginx。 ```shell sudo service nginx restart ``` ## 结论 现在我们已经成功地将Django应用程序部署到生产环境中。我们使用Gunicorn处理并发请求,并使用Nginx作为反向代理,以提高性能和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值