我正在编写一段代码,需要从ColdFusion系统获取帖子,当涉及到JSON时,这个系统非常不灵活,而且我对它没有太多的控制权。我遇到了一个问题,在ColdFusion上运行的自动化系统有时会将“空”分米线发送为“”。这会导致Django中出现验证错误,因为无法从空字符串转换十进制字段:
TOTAL_DEFECTS = models.DecimalField(max_digits=10, decimal_places=2, null = True)
JSON失败了。。。在
^{pr2}$这应该只会产生一个空字段,但是它会出错,说这是无效的。从技术上讲,这不是因为,当然,在Python中不能这样做:
import decimal
decimal.Decimal("")
为了处理这个问题,我侵入了viewset的分派例程。我想知道有没有更好的方法。Hack-y代码:
@csrf_exempt # Because ColdFusion can't handle CSRF headers
def dispatch(self, request, *args, **kwargs):
repregex = re.compile(r'"",') # This is actually done elsewhere in the real code
nbody = repregex.sub('null,', request.body)
request._body = nbody
request._stream = BytesIO(nbody)
a = super(XViewSet, self).dispatch(request, *args, **kwargs)
if a.status_code != 201:
#log errors here
pass
return a
这个方法适用于这个特定的案例,但我想可能离我能得到的理想还差得远。除了重写这个不打算重写的HttpRequest对象之外,还有没有一种更适合Django风格的方法来完成这个任务?在
是的,还有更好的办法!您的答案是序列化程序中的customize the ^{} options 。我将使用additional arguments保持代码干燥,方法如下:
当然,您必须使用实际的序列化程序和视图切换}。在
MyModel
、MyView
和{相关问题 更多 >
编程相关推荐