- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每当我 POST 到我的 django-rest-framework (DRF) 端点时,我都会收到 "HTTP 400 Bad Request" {"offeror_organization":["This field is required."]}
回复。但是,鉴于下面的 curl 示例,我明确指定了一个值。
无论内容类型(application/json、application/x-www-form-urlencoded、multipart/form-data)如何,都会发生这种情况。它唯一有效的时间是当我使用 DRF Web 界面上的“HTML 表单”(与“原始数据”)选项卡提交时。
有一些类似的 SO 帖子(如 this 和 this ),但似乎没有一个解决方案对我有用。
型号:
class OrganizationManager(models.Manager):
def get_by_natural_key(self, offeror_organization):
return self.get(offeror_organization=offeror_organization)
class Organization(models.Model):
idorganization = models.AutoField(primary_key=True)
offeror_organization = models.CharField(max_length=250, null=False, blank=False, verbose_name='Offeror Organization')
created_at = models.DateTimeField(auto_now_add=True, null=False)
updated_at = models.DateTimeField(auto_now=True, null=False)
objects = OrganizationManager()
def natural_key(self):
return "%s" % (self.offeror_organization)
def __str__(self):
return self.offeror_organization
序列化程序:
class OrganizationSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Organization
fields = ['offeror_organization']
# I've tried both with and without a create function
def create(self, validated_data):
organization_data = validated_data.pop('offeror_organization', None)
if organization_data:
organization = Organization.objects.get_or_create(**organization_data)[0]
validated_data['offeror_organization'] = organization
View /api.py:
from webapp.models import Organization
from webapp.serializers import OrganizationSerializer
from rest_framework import viewsets
class OrganizationViewSet(viewsets.ModelViewSet):
queryset = Organization.objects.all().order_by('offeror_organization')
serializer_class = OrganizationSerializer
urls.py:
from django.urls import include, path
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(r'organization', views.OrganizationViewSet)
urlpatterns = [
...
path('api/', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
curl 命令:
curl -X POST -H 'Content-Type: application/json' -d '{"offeror_organization":"Test2"}' 10.101.10.228:29000/webapp/api/organization/
settings.py 中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'csp.middleware.CSPMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware'
]
settings.py REST_FRAMEWORK
# currently have all API authentication disabled while troubleshooting this issue
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [],
'DEFAULT_PERMISSION_CLASSES': [],
}
最佳答案
就我而言,解决这个问题需要围绕几个不同的实现约束进行“机动”。
nginx + uWSGI Socket + Django REMOTE_USER 认证 :
正如这篇文章的评论/聊天中提到的,我的 Django 应用程序前面有一个 nginx 代理和一个 uWSGI 应用程序服务器。因为我依赖 REMOTE_USER Authentication , 我的 uwsgi/nginx 配置 必须使用 uWSGI 套接字(与 http),以便我可以将 REMOTE_USER 从 nginx 传递给 Django 作为环境变量。使用 http(与 nginx proxy_pass 耦合)时,虽然 proxy_pass 可以设置 header 或 cookie,但这些似乎无法转换为 Django(需要环境变量)。
我认为在尝试 POST 到使用 uWSGI 套接字服务的 Django/DRF 应用程序时存在一些问题。根据 uWSGI Things to know (best practices) , “TL/DR:如果您打算直接向公众公开 uWSGI,请使用 --http,如果您想将其代理到与后端通信的网络服务器后面,请使用 --http-socket”。就我而言,同时拥有 Web 应用程序和基于 DRF 的 API(我希望其他服务和系统与之通信),我需要两者!作为(希望是临时的)解决方法,我目前正在生成 两个 uWSGI 进程 - 一个使用 --socket
,还有一个使用 --http
(对于 API POST 调用)。如果您在使用 ---socket 时进行 POST,您可能会收到来自 DRF 的 Empty Response 错误。
顺便说一句,我最初看到使用 uwsgi_curl(来自 uwsgi_tools)通过 uWSGI 套接字 POST 的一些“ promise ”(这导致了“需要字段”错误(与空响应错误),但那是我开始遇到我的第二个问题...
POST 嵌套应用程序/json,同时上传文件:帖子中引用的“组织”模型主要是概念验证,因为它是我的 Django 应用程序中最简单的模型。实际上,我需要使用嵌套序列化发布到更复杂的模型,因为该模型包含其他模型的外键。但这完全可以通过 DRF 实现。除了在我的情况下,我的模型属性之一是 FileUpload 字段。正如其他 SO 问题(如 this one)中所述,尝试在单个请求中使用文件上传 POST 嵌套(即非“平面”)应用程序/json 时也存在一些问题。虽然我永远无法完全理解正在发生的问题(至少在我的情况下使用 drf_writable_nested.serializers.WritableNestedModelSerializer
),但我通过编写自己的自定义序列化程序(serializers.Serializer)简化了手头的问题,这样我就可以避免嵌套的 JSON对象(如 { "offeror_organization": {"offeror_organization: "Test"}} 在我的 POST 请求中。这解决了我的问题。
使用自定义序列化程序来缓解嵌套的 JSON + 文件上传问题后,我敢打赌 uwsgi_curl POST 会起作用。尽管那时外部客户端系统/服务仅限于使用该 Python 包。无论如何,我会在尝试后更新我的答案。感谢@Michael 的评论并帮助我走上正确的“道路”。
关于POST 上的 django-rest-framework "This field is required",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67131667/
使用 ABC 加载模块 ( require )在分发的一个模块中工作,而在分发的另一个模块中失败。 加载 ABC 的原因可能是什么?与 require在一个地方失败? require Name::AB
我定义了以下方法: void Write(string fileContent, string fileName, string container = StorageBlobContainers.P
现在,Require.js是我最喜欢的Javascript编程方式。它可以使代码化整为零,并易于管理。而Require.js Optimizer能帮助我们将一个较大的应用分散成多个较小的应用,并通过
尝试开始使用 apioto http://apiato.io/A.getting-started/installation/ 如果我尝试测试 http://api.apiato.dev/registe
浏览 MDN 文档以查看提议的伪类的状态时,我遇到了 :required(并且扩展为 :optional)。这两个都已经存在很长时间了,但我现在才刚刚了解到。 此选择器与使用属性选择器 [requir
我正在尝试实现此条件:如果存在特定属性,则需要另一个属性;但如果它不存在,则不需要另一个。 另外,在 JSON 模式中,我们可以在依赖项中使用 not 吗? 这是一个示例架构 var schema =
我正在使用react-hot-loader我对其示例代码感到非常困惑: import React from 'react' import ReactDOM from 'react-dom' impor
过去几天我一直在玩 requirejs。我试图理解定义和要求之间的区别。 Define 似乎允许模块分离并允许遵守依赖关系顺序。但它会下载开始时所需的所有文件。而 require 仅在您需要时加载您需
我的项目是使用 angular cli [版本 - 6.1.3] 创建的。 我安装了 npm 模块 - is-reachable并在我的代码中使用它作为 - const isReachable = r
(有人可能会相应地更改标题)当像这样调用 javascript 的 require 方法时到底发生了什么: var xyz = require('xy')(require('z')); 谢谢 最佳答案
我一直在使用编译为 Node 代码的 Typescript 开发应用程序。因此,我更喜欢使用 import 语句来 require。 我一直在尝试将 Lodash 与 Lodash-Deep 一起使用
我在 require 中有一个奇怪的行为,我不知道如何避免(或者也许我的基础知识错误?)。 考虑以下代码: define (require) -> potoo = require "potoo"
这两种加杏仁和不加杏仁有什么区别? require('模块');require(['模块']); 编辑 嵌套: define(function() { require('module'); } def
我愿意使用 require.js 优化器优化我的 javascript 应用程序,但我现在想知道是否也可以在一个文件中包含 require.config 路径和 javascript 模块。事实上,在
我想我需要在一个页面中支持多个 require 实例,但在实现它时遇到了两个问题。我正在开发一项服务,该服务向外部客户端页面提供可嵌入的交互式对象。最重要的设计标准是易于嵌入,尽可能少地假设客户端环境
required 和 ng-required(表单验证)之间有什么区别? 最佳答案 AngularJS 表单元素查找 required属性来执行验证功能。 ng-required允许您设置requir
我有以下多选框: 0" /> 在我的 Controller 中,我在初始化时执行此操作: $scope.form.Slides = []; 如果幻灯片数组中有幻灯片,我希望表单的此元素有效。这些是动
我在 ubuntu 上运行 VPS: Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 C
我正在使用 ArcGIS API for Javascript 3.21。我在 require() 中有一个函数。我希望在单击按钮时调用该函数,但该按钮位于 require() 之外。
我的浏览器应用程序使用 require.js。该应用程序在屏幕上显示许多不同的小部件之一。 URL 片段包含小部件的路径(require.js 路径),然后调用 require 来动态加载它: var
我是一名优秀的程序员,十分优秀!