Python EVE:- 在 Python EVE 中为某些端点阻止 POST 方法和启用 PUT 方法
Python EVE:- Blocking POST Method and Enabling PUT Method for some endpoints in Python EVE
我最初编写 webservice
是为了允许在所有端点上使用 'GET' 和 POST
方法。现在我们的网络服务工作流程发生了一些变化,我们想要阻止某些端点的 POST
端点并为它们启用 PUT
某些端点仍将启用 POST
。
我会通过添加 settings.py
的代码片段来解释更多
__author__ = 'sappal'
# pulling DBSchema from DBTableSchema
from DBSchema.DBTableSchema import DBTableSchema
from Configs import Configs
dbtableSchema = DBTableSchema()
# Let's just use the local mongod instance. Edit as needed.
# Please note that MONGO_HOST and MONGO_PORT could very well be left
# out as they already default to a bare bones local 'mongod' instance.
## LOCALHOST ENTRIES
MONGO_HOST = Configs.MONGO_DB_HOST
MONGO_PORT = Configs.MONGO_DB_PORT
MONGO_USERNAME = Configs.MONGO_DB_USER_NAME
MONGO_PASSWORD = Configs.MONGO_DB_PASSWORD
MONGO_DBNAME = Configs.MONGO_DB
# Enable reads (GET), inserts (POST) and DELETE for resources/collections
# (if you omit this line, the API will default to ['GET'] and provide
# read-only access to the endpoint).
RESOURCE_METHODS = ['GET', 'PATCH', 'POST', 'DELETE']
# Enable reads (GET), edits (PATCH), replacements (PUT) and deletes of
# individual items (defaults to read-only item access).
ITEM_METHODS = ['GET', 'PATCH', 'PUT', 'DELETE', 'POST']
# Used for implementing user-resource restricted access.
# Returns the documents which are associated with particular user
AUTH_FIELD = 'userid'
people = {
'item_title': 'person',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'POST'],
'schema': dbtableSchema.schema_people,
'public_methods': ['POST']
}
org = {
'item_title': 'org',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_org
}
puburl = {
'item_title': 'puburl',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_pub_url
}
address = {
'item_title': 'address',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_address
}
contactnumber = {
'item_title': 'contactnumber',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_contact_number
}
template = {
'item_title': 'template',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'POST'],
'schema': dbtableSchema.schema_template
}
usersharedcontacts = {
'item_title': 'usersharedcontacts',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_with_user_shared_contacts
}
cardholder = {
'item_title': 'cardholder',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_card_holder
}
DOMAIN = {
'people': people,
'org': org,
'puburl': puburl,
'address': address,
'contactnumber': contactnumber,
'template': template,
'usersharedcontacts': usersharedcontacts,
'cardholder': cardholder
}
我想为 people
和 template
端点启用 POST
方法,如您所见,我已经为上述端点进行了此配置 'resource_methods': ['GET', 'POST']
.
我还想为其余端点禁用 POST
方法,因此我为其余端点 'resource_methods': ['GET', 'PATCH'],
配置了以下内容。
我也配置了RESOURCE_METHODS = ['GET', 'PATCH', 'POST', 'DELETE']
但是当我尝试 运行 应用程序时,我在以下类型的控制台上收到错误
eve.exceptions.ConfigException: Unallowed [usersharedcontacts] resource method(s): PATCH. Supported: GET, POST, DELETE
Process finished with exit code 1
PATCH
是一个文档(项目)方法,而不是资源方法,这就是你得到一个 Unallowed 异常的原因。尝试:
'resource_methods': ['GET'], # read-only resource endpoint
'item_methods': ['PATCH'] # still allow edits at the document endpoint
有关详细信息,请参阅文档中的 CRUD Operations table。
我最初编写 webservice
是为了允许在所有端点上使用 'GET' 和 POST
方法。现在我们的网络服务工作流程发生了一些变化,我们想要阻止某些端点的 POST
端点并为它们启用 PUT
某些端点仍将启用 POST
。
我会通过添加 settings.py
__author__ = 'sappal'
# pulling DBSchema from DBTableSchema
from DBSchema.DBTableSchema import DBTableSchema
from Configs import Configs
dbtableSchema = DBTableSchema()
# Let's just use the local mongod instance. Edit as needed.
# Please note that MONGO_HOST and MONGO_PORT could very well be left
# out as they already default to a bare bones local 'mongod' instance.
## LOCALHOST ENTRIES
MONGO_HOST = Configs.MONGO_DB_HOST
MONGO_PORT = Configs.MONGO_DB_PORT
MONGO_USERNAME = Configs.MONGO_DB_USER_NAME
MONGO_PASSWORD = Configs.MONGO_DB_PASSWORD
MONGO_DBNAME = Configs.MONGO_DB
# Enable reads (GET), inserts (POST) and DELETE for resources/collections
# (if you omit this line, the API will default to ['GET'] and provide
# read-only access to the endpoint).
RESOURCE_METHODS = ['GET', 'PATCH', 'POST', 'DELETE']
# Enable reads (GET), edits (PATCH), replacements (PUT) and deletes of
# individual items (defaults to read-only item access).
ITEM_METHODS = ['GET', 'PATCH', 'PUT', 'DELETE', 'POST']
# Used for implementing user-resource restricted access.
# Returns the documents which are associated with particular user
AUTH_FIELD = 'userid'
people = {
'item_title': 'person',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'POST'],
'schema': dbtableSchema.schema_people,
'public_methods': ['POST']
}
org = {
'item_title': 'org',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_org
}
puburl = {
'item_title': 'puburl',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_pub_url
}
address = {
'item_title': 'address',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_address
}
contactnumber = {
'item_title': 'contactnumber',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_contact_number
}
template = {
'item_title': 'template',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'POST'],
'schema': dbtableSchema.schema_template
}
usersharedcontacts = {
'item_title': 'usersharedcontacts',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_with_user_shared_contacts
}
cardholder = {
'item_title': 'cardholder',
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'resource_methods': ['GET', 'PATCH'],
'schema': dbtableSchema.schema_people_card_holder
}
DOMAIN = {
'people': people,
'org': org,
'puburl': puburl,
'address': address,
'contactnumber': contactnumber,
'template': template,
'usersharedcontacts': usersharedcontacts,
'cardholder': cardholder
}
我想为 people
和 template
端点启用 POST
方法,如您所见,我已经为上述端点进行了此配置 'resource_methods': ['GET', 'POST']
.
我还想为其余端点禁用 POST
方法,因此我为其余端点 'resource_methods': ['GET', 'PATCH'],
配置了以下内容。
我也配置了RESOURCE_METHODS = ['GET', 'PATCH', 'POST', 'DELETE']
但是当我尝试 运行 应用程序时,我在以下类型的控制台上收到错误
eve.exceptions.ConfigException: Unallowed [usersharedcontacts] resource method(s): PATCH. Supported: GET, POST, DELETE
Process finished with exit code 1
PATCH
是一个文档(项目)方法,而不是资源方法,这就是你得到一个 Unallowed 异常的原因。尝试:
'resource_methods': ['GET'], # read-only resource endpoint
'item_methods': ['PATCH'] # still allow edits at the document endpoint
有关详细信息,请参阅文档中的 CRUD Operations table。