سؤال

لديّ إعداد حيث أقدم صفحات Python بسيطة باستخدام ناشر Mod_python. في بعض النقاط ، أود أن ترفع وظيفة Python خطأ Apache قياسي - على سبيل المثال رمي خطأ 500 إذا كان الملف المطلوب مفقودًا. كيف يمكنني رمي خطأ Apache من داخل البرنامج النصي mod_python؟

هل كانت مفيدة؟

المحلول

أنا لست خبير بيثون ولكن من هذه الوثائق, ، يبدو أنه يمكنك القيام به:

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 بعدم كتابة صفحة الخطأ الخاصة بها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top