Django Rest Framework:通过 AJAX 上传文件

2023-12-10

我有一个视图和序列化器:

class UserView(generics.RetrieveUpdateAPIView):
    model = get_user_model()
    serializer_class = UserProfileSerializer
    permission_classes = (permissions.IsAuthenticated,)

    def get_object(self, *args, **kwargs):
        return self.request.user


class UserImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = ('image',)

它们与 httpie 配合得很好:

http -f put localhost:8000/accounts/api/image/ "Authorization: Token mytoken" image@~/Downloads/test.jpg
HTTP/1.0 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Date: Thu, 03 Sep 2015 22:50:33 GMT
Server: WSGIServer/0.2 CPython/3.4.3
Vary: Accept
X-Frame-Options: SAMEORIGIN

{
    "image": "http://localhost:8000/media/accounts/user_images/test.jpg"
}

我的图片已上传并显示在管理员中。

现在我希望能够使用 AJAX 上传文件,但它显然不想工作:

<form action="http://localhost:8000/accounts/api/image/"
      method="put"
      enctype="multipart/form-data">
    <input name="image" type="file">
    <input type="submit">
</form>

<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

<script>
    $('form').submit(function(e) {
        var formData = new FormData($(this));
        $.ajax({
            url: $(this).attr('action'),
            type: $(this).attr('method'),
            data: formData,
            headers: {'Authorization': 'Token mytoken'},
            cache: false,
            contentType: false,
            processData: false,
            success: function() { alert('it works') },
        });
        e.preventDefault();
    });
</script>

现在,我的“它有效”警报出现了。我知道表单被提交到正确的位置,我可以在 Django 开发服务器中看到它被请求为 PUT 并且它以 200 响应(与 httpie 的响应相同):

[03/Sep/2015 22:47:23] "PUT /accounts/api/image/ HTTP/1.1" 200 77

但似乎该文件没有被上传,并且它没有显示在管理中。

我没主意了。


好吧,我无法确切解释为什么,但似乎var formData = new FormData($(this));单独是不够的,需要明确附加,因为原因?如果有人可以解释,请解释。

工作代码:

<form action="http://localhost:8000/accounts/api/image/"
      method="put"
      enctype="multipart/form-data">
    <input name="image" type="file" id="image">
    <input type="submit">
</form>

<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

<script>
    $('form').submit(function(e) {
        var formData = new FormData($(this)[0]);
        formData.append('image', $('#image')[0].files[0]);
        $.ajax({
            url: $(this).attr('action'),
            type: $(this).attr('method'),
            data: formData,
            headers: {'Authorization': 'Token mytoken'},
            cache: false,
            contentType: false,
            processData: false,
            success: function() { alert('it works') },
        });
        e.preventDefault();
    });
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Rest Framework:通过 AJAX 上传文件 的相关文章

随机推荐

  • Angular.js 至少需要一个复选框[重复]

    这个问题在这里已经有答案了 如果这是重复的 我不会感到惊讶 但是我找不到任何符合我需要的简单内容 我所需要的只是要求用户至少选择一个复选框 但我对如何实现这一目标感到困惑
  • 如何使用 hibernate criteria api 执行 union 子句查询

    SELECT supplier id FROM suppliers UNION ALL SELECT supplier id FROM orders 我只是在查询的 UNION ALL 子句上方和查询的 UNION ALL 子句下方创建两个
  • 无法在设备 HTC6435LVW Droid DNA Deluxe 上检索 Build.MANUFACTURER

    这看起来是一个非常基本的问题 我无法检索一些基本信息 例如Build MANUFACTURER Build MODEL and Build VERSION RELEASE 我的代码可以在 50 多种设备上运行 但在以下情况下失败HTCC64
  • 与在电子邮件签名中实施图像相关的一些问题?

    我需要用图像实现电子邮件签名 到目前为止 我们只支持已经可以使用的电子邮件签名中的文本 我需要提供该功能 我可以在邮件签名中插入图像 我可以将电子邮件发送给我的应用程序中的用户 也可以发送给外部邮件域 如 gmail yahoo 等 上的用
  • 获取 JAX-RS 资源中的 ServletContext

    我正在玩 JAX RS 部署在 Tomcat 上 基本上是 Path hello Produces text plain public class Hellohandler GET public String hello return He
  • FILTER_SANITIZE_STRING 有何作用?

    有大约一百万个问答来解释这些选项 例如FILTER FLAG STRIP LOW 但是什么是FILTER SANITIZE STRING自己做 没有任何选择 它只是过滤标签吗 根据PHP手册 剥离标签 可选择剥离或编码特殊字符 根据W3学校
  • Android - 导航抽屉片段

    我已经在我的 Android 应用程序中实现了导航抽屉 但现在我希望能够在用户单击导航栏中的任何列表项时使用片段更改布局 这是我到目前为止所得到的 XML
  • 在 Windows 上可以使用什么来代替 Unix 管道进行进程间通信?

    我有一个启动子进程的应用程序 子进程从标准输入读取要操作的文件 对于某些操作 它需要一个输入文件 其中包含有关如何处理其操作的文件的信息 我们将其称为 控制文件 控制文件的名称也是从 stdin 读取的 父应用程序可以使用临时文件作为控制文
  • 如何在express和bodyParser中接受application/csp-report作为json?

    我正在尝试编写一个中间件来接受来自浏览器的 CSP 报告 浏览器问题application csp report as Content Type 发布的请求是 JSON 格式 目前我使用bodyParser text接受该内容类型 但我想也
  • 记录与数据库通信的 SQL

    我正在为我的 Web 应用程序开发 SQL 记录器 我希望能够记录由用户与 GUI 交互触发的 SQL 查询 我在Spring环境中工作 使用maven和mybatis 我将我的 webapp 打包成一个 war 并将其部署到 tomcat
  • 从 OpenOffice 运行 SWT 应用程序时发生致命错误

    我有一个开发办公室Java 插件应用程序 我正在打电话SWT从一个XActionListener SWT 的加载是使用特殊的类加载器动态完成的 SWT 窗口显示良好 但当我点击 SWT 窗口的关闭按钮时 出现错误 我附上了此错误生成的错误文
  • 如何测试使用 exec_() 调用的自定义对话框窗口?

    我正在尝试为我的项目编写系统测试 我有一个启动各种窗口的控制器类 但是 我似乎无法使用 exec 和 qtbot 来控制 Windows 启动 这是一个 MVCE from PyQt5 QtWidgets import from PyQt5
  • Angular 1.5 组件 $onDestroy 和 $scope.$destroy() 之间的区别

    我想了解控制器之间的区别 onDestroy方法和 scope destroy 定义表明 当需要销毁组件的包含范围时 将调用 onDestroy 但 scope destroy 的情况不是一样吗 根据我创建的 plunkerhttps pl
  • PyQT 中的弹出式、非模态、内联对话框

    很难描述我想在这里做什么 所以这就是我想要的 单击 弹出 对话框的按钮 但是 该对话框应该是非模式的 我还希望它能与父应用程序 锁定 这样如果我移动它 它也会随之而来 看起来我或多或少试图描述一个内联弹出窗口 但我不确定这是否就是它的名字
  • 如何修复我的正则表达式,使其不与贪婪量词匹配太多? [复制]

    这个问题在这里已经有答案了 我有以下几行 14 48 say 0ed673079715c343281355c2a1fde843 2 laka hello 我使用一个简单的正则表达式来解析它 if line d d ssay my ts ha
  • 如何清除mkmapview的缓存

    在我的应用程序中 我有一个文本字段和一个搜索按钮 当用户在文本字段上填写地址后单击搜索按钮时 我的应用程序会显示结果并在地图视图上放置一个图钉 我正在使用谷歌地图 API 我还添加了用户可以拖放图钉的功能 当用户将图钉拖放到另一个地方时 应
  • C++程序设计

    如何有效地设计C 模块化程序 如何学习 对于初学者 您可能想要采取 暴力 过程 1 写一个简单的main函数在一个文件中 2 添加一些功能 编译然后测试 3 重构 在Google中使用这个关键字 以下是一些重构指南 并非所有指南都可以同时适
  • 父进程:子进程已退出,状态为 3221226356 -- 正在重新启动

    我正在 Windows 7 Home Premium 上运行带有 XAMPP 1 8 1 Apache 2 4 3 和 PHP 5 4 7 的测试服务器 昨天一切都运行良好 但今天我开始在 Apache 的 error log 中收到此消息
  • PHP 中的 EVP_BytesToKey 实现

    我一直在尝试在 PHP 中实现与 C 中完全相同的函数 但是 我还没有看到完全相同的结果 我认为问题在于我仍然不完全理解的 计数 或迭代 函数定义 int EVP BytesToKey const EVP CIPHER type const
  • Django Rest Framework:通过 AJAX 上传文件

    我有一个视图和序列化器 class UserView generics RetrieveUpdateAPIView model get user model serializer class UserProfileSerializer pe