Python 웹 응용 프로그램을 어떻게 만드는지 (3): JSON schema와 복잡한 json 요청체의 검사
일반적으로 데이터 체크에는 다음과 같은 계층이 포함됩니다.
우선, JSON Schema란?아래 자료를 참조하십시오.
jsonschema와 파생된 도구의 생태는 상기 기능을 제공하는 것 외에 사용하기 쉬운 도구도 제공한다.
다음은 대부분의 용례를 포함하는 jsonschema python module 사용 사례 (참고 자료 이다
from jsonschema import validate, ValidationError #
@app.route('/login4', methods=['POST'])
def login4():
body = request.get_json()
try:
validate(
body,
{
"$schema": "http://json-schema.org/learn/getting-started-step-by-step",
# JSON ,title ,
"title": "book info",
# JSON ,description
"description": "some information about book",
# JSON , :object,array,integer,number,string,boolean,null
"type": "object",
# JSON key ,
# JSON key , key , JSON Schema, JSON 。
"properties": {
"id": {
"description": "The unique identifier for a book",
"type": "integer",
"minimum": 1
},
"name": {
"description": "book name",
"type": "string",
"minLength": 3,
"maxLength": 30
},
"tips": {
"anyOf": [ #
{"type": "string", "minLength": 10, "maxLength": 60},
{"type": "number", "minimum": 5.0}
]
},
"price": {
"description": "book price",
"type": "number",
# 0.5
"multipleOf": 0.5,
# ,5.0= ".join([i for i in e.path]), e.message)
print(msg)
return jsonify(status=500, msg=msg)
print(body)
title = body.get('title')
return '1'
매거를 사용하는 예를 하나 더 넣다.매거진은 속성이 어떤 값을 얻을 수 있는지 지정했다.
참조: enum 문서
def check_request(user_id, req_body):
if request.is_json:
handle_request_schema = {
"title": "handle requests",
"type": "object",
"properties": {
"id": {"type": "string", "maxLength": 20},
"tags": {
"type": "array",
"items": {"enum": [tag.tag_name for tag in ETag.query.all()]},
"uniqueItems": True
},
"self_answers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string", "maxLength": 20},
"type": {"enum": [elem.type_name for elem in CAnswerType.query.all()]},
"level": {"enum": [elem.level for elem in CAnswerLevel.query.all()]}
},
"required": ["id", "allowed", "comment", "author_id",
"type", "content", "summary", "level"]
}
},
"adjusted_answers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string", "maxLength": 20},
"level": {
"enum": [level.level for level in CAnswerLevel.query.all()]}
},
},
}
}
}
try:
validate(req_body, handle_request_schema)
except ValidationError as e:
msg = "json schema :
:{}
:{}".format(".".join([str(i) for i in e.path]), e.message)
return msg, 500
else:
return " JSON ", 500
return "", 200
특히 위의 예에서 매거진 수치는 실행할 때 동적으로 불러오는 것으로 프로그램의 작성과 유지보수에 큰 편의성을 제공했다
열거뿐만 아니라 실제 필드의 길이도 SQLAlchemy를 통해 동적으로 얻을 수 있습니다.
방법:how-to-get-sqlalchemy-length-of-a-string-column
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.