اذهب إلى المحتوى
  • 0

خطأ RuntimeError: working outside of request context في فلاسك Flask؟

Mohssen A Mohssen

السؤال

قمت بإنشاء مزخرف decorator لإستعماله في مشروع فلاسك Flask، ومهمته هي التحقق من نوع الطلب الواصل للمسار route وإن لم يكن الطلب يحتوي على json سوف يتم عرض خطأ 404:

def validate_request(request_type):
    # عرض رسالة خطأ إن لم يكن الطلب يحتوي على json
    if request_type is 'json' and not request.json:
        abort(400)
    
    def decorator(func):
        @functools.wraps(func)
        def wrapped_func(*args, **kwargs):
            return func(*args, **kwargs)
        return wrapped_func
    return decorator

@app.route('/api/v1/random', methods=['POST'])
@validate_request('json')
def update_task(task_id):
	# ...

المشكلة هنا أن الكود السابق يظهر رسالة خطأ من نوع RuntimeError

RuntimeError: working outside of request context

ما المشكلة هنا؟ وكيف أصلح هذا الخطأ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

المشكلة في تعريف ال decorator بشكل خاطئ يجب ان يتعامل مع الطلب request الذي يأتي من الدالة  update_task يجب حذف دالة validate_request وأيضاً يجب جلب الطلب داخل  الdecorator وتعريفه ويوجد في Flask دالة flask.request.get_json تقوم بفحص هل الطلب json أم لا وترجع قيمة bool اذا كانت False سوف يتم عرض خطأ 404 بشكل التالي:

def validate_request(func):
  @functools.wraps(func)
  def decorator_func(*args, **kwargs): 
    json = flask.request.get_json() #  أم لا Json التحقق من نوع الطلب الواصل
    if not json:
      flask.abort(404)
    return func(*args, **kwargs)
  return decorator_func

@app.route('/api/v1/random', methods=['POST'])
@validate_request # هنا وضع المُزخرف وسوف يتعامل مع الطلب
def update_task(task_id):
	# ...

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...