mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 04:50:12 +03:00
Graceful handling when API inputs malformed or missing
This commit is contained in:
parent
97e14d03f7
commit
057175ffbd
|
@ -40,28 +40,44 @@ $('form.api-interaction').submit(function(event) {
|
||||||
for (var [paramKey, paramValue] of formData.entries()) {
|
for (var [paramKey, paramValue] of formData.entries()) {
|
||||||
var elem = form.find("[name=" + paramKey + "]")
|
var elem = form.find("[name=" + paramKey + "]")
|
||||||
var dataType = elem.data('type') || 'string'
|
var dataType = elem.data('type') || 'string'
|
||||||
var dataLocation = elem.data('location')
|
|
||||||
|
|
||||||
if (dataType === 'integer' && paramValue) {
|
if (dataType === 'integer' && paramValue) {
|
||||||
paramValue = parseInt(paramValue)
|
let value = parseInt(paramValue)
|
||||||
|
if (!isNaN(value)) {
|
||||||
|
params[paramKey] = value
|
||||||
|
}
|
||||||
} else if (dataType === 'number' && paramValue) {
|
} else if (dataType === 'number' && paramValue) {
|
||||||
paramValue = parseFloat(paramValue)
|
let value = parseFloat(paramValue)
|
||||||
|
if (!isNaN(value)) {
|
||||||
|
params[paramKey] = value
|
||||||
|
}
|
||||||
} else if (dataType === 'boolean' && paramValue) {
|
} else if (dataType === 'boolean' && paramValue) {
|
||||||
paramValue = {
|
let value = {
|
||||||
'true': true,
|
'true': true,
|
||||||
'false': false
|
'false': false
|
||||||
}[paramValue.toLowerCase()]
|
}[paramValue.toLowerCase()]
|
||||||
|
if (value !== undefined) {
|
||||||
|
params[paramKey]
|
||||||
|
}
|
||||||
} else if (dataType === 'array' && paramValue) {
|
} else if (dataType === 'array' && paramValue) {
|
||||||
paramValue = JSON.parse(paramValue)
|
try {
|
||||||
|
params[paramKey] = JSON.parse(paramValue)
|
||||||
|
} catch (err) {
|
||||||
|
// Ignore malformed JSON
|
||||||
}
|
}
|
||||||
|
} else if (dataType === 'object' && paramValue) {
|
||||||
if (dataLocation === 'query' && !paramValue) {
|
try {
|
||||||
continue
|
params[paramKey] = JSON.parse(paramValue)
|
||||||
|
} catch (err) {
|
||||||
|
// Ignore malformed JSON
|
||||||
}
|
}
|
||||||
|
} else if (dataType === 'string' && paramValue) {
|
||||||
params[paramKey] = paramValue
|
params[paramKey] = paramValue
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
form.find(":checkbox").each(function( index ) {
|
form.find(":checkbox").each(function( index ) {
|
||||||
|
// Handle unselected checkboxes
|
||||||
var name = $(this).attr("name");
|
var name = $(this).attr("name");
|
||||||
if (!params.hasOwnProperty(name)) {
|
if (!params.hasOwnProperty(name)) {
|
||||||
params[name] = false
|
params[name] = false
|
||||||
|
|
Loading…
Reference in New Issue
Block a user