【发布时间】:2010-03-26 01:36:45
【问题描述】:
我有一个设置,我使用 mod_python 发布者提供简单的 python 页面。在某些时候,我想让 python 函数引发标准的 apache 错误——例如,如果缺少所需的文件,则抛出 500 错误。如何从 mod_python 脚本中抛出 apache 错误?
【问题讨论】:
标签: python apache mod-python http-error
我有一个设置,我使用 mod_python 发布者提供简单的 python 页面。在某些时候,我想让 python 函数引发标准的 apache 错误——例如,如果缺少所需的文件,则抛出 500 错误。如何从 mod_python 脚本中抛出 apache 错误?
【问题讨论】:
标签: python apache mod-python http-error
我不是python专家,但来自this documentation,看来你可以做到:
raise apache.SERVER_RETURN, apache.HTTP_INTERNAL_SERVER_ERROR
如果链接失效,这是文档的引用:
处理函数将始终传递对请求的引用 目的。 (在本手册中,请求对象经常被提及 到 req 变量。)
每个处理程序都可以返回:
apache.OK,表示这个阶段的请求是由这个处理的 处理程序,没有发生错误。
apache.DECLINED,意味着这个处理程序没有处理这个阶段 请求完成,Apache 需要寻找另一个处理程序 在后续模块中。
apache.HTTP_ERROR,表示发生了 HTTP 错误。 HTTP_ERROR 可以是 以下任何一项:
HTTP_CONTINUE = 100 HTTP_SWITCHING_PROTOCOLS = 101 HTTP_PROCESSING = 102 HTTP_OK = 200 HTTP_CREATED = 201 HTTP_ACCEPTED = 202 HTTP_NON_AUTHORITATIVE = 203 HTTP_NO_CONTENT = 204 HTTP_RESET_CONTENT = 205 HTTP_PARTIAL_CONTENT = 206 HTTP_MULTI_STATUS = 207 HTTP_MULTIPLE_CHOICES = 300 HTTP_MOVED_PERMANENTLY = 301 HTTP_MOVED_TEMPORARILY = 302 HTTP_SEE_OTHER = 303 HTTP_NOT_MODIFIED = 304 HTTP_USE_PROXY = 305 HTTP_TEMPORARY_REDIRECT = 307 HTTP_BAD_REQUEST = 400 HTTP_UNAUTHORIZED = 401 HTTP_PAYMENT_REQUIRED = 402 HTTP_FORBIDDEN = 403 HTTP_NOT_FOUND = 404 HTTP_METHOD_NOT_ALLOWED = 405 HTTP_NOT_ACCEPTABLE = 406 HTTP_PROXY_AUTHENTICATION_REQUIRED= 407 HTTP_REQUEST_TIME_OUT = 408 HTTP_CONFLICT = 409 HTTP_GONE = 410 HTTP_LENGTH_REQUIRED = 411 HTTP_PRECONDITION_FAILED = 412 HTTP_REQUEST_ENTITY_TOO_LARGE = 413 HTTP_REQUEST_URI_TOO_LARGE = 414 HTTP_UNSUPPORTED_MEDIA_TYPE = 415 HTTP_RANGE_NOT_SATISFIABLE = 416 HTTP_EXPECTATION_FAILED = 417 HTTP_UNPROCESSABLE_ENTITY = 422 HTTP_LOCKED = 423 HTTP_FAILED_DEPENDENCY = 424 HTTP_INTERNAL_SERVER_ERROR = 500 HTTP_NOT_IMPLEMENTED = 501 HTTP_BAD_GATEWAY = 502 HTTP_SERVICE_UNAVAILABLE = 503 HTTP_GATEWAY_TIME_OUT = 504 HTTP_VERSION_NOT_SUPPORTED = 505 HTTP_VARIANT_ALSO_VARIES = 506 HTTP_INSUFFICIENT_STORAGE = 507 HTTP_NOT_EXTENDED = 510作为返回 HTTP 错误代码的替代方法,处理程序可以发出信号 通过引发 apache.SERVER_RETURN 异常并提供错误 HTTP 错误代码作为异常值,例如:
raise apache.SERVER_RETURN, apache.HTTP_FORBIDDEN
【讨论】:
我相信是:
def my_action(req):
# all the status code constants are defined in the apache module
req.status = apache.HTTP_INTERNAL_SERVER_ERROR
req.content_type = some_mime_type
req.write(content)
raise apache.HTTP_SERVER_RETURN, apache.DONE
提高 apache.DONE 告诉 Apache 不要写出自己的错误页面。
【讨论】: