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

السؤال

نشر

أستخدم فلاسك Flask للقيام بمشروع بسيط، ولدي ملف main.py يحتوي على الكود التالي:

from flask import Flask
from view import tags

app = Flask(__name__)

@app.route('/')
def index():
    return 'Home page'

if __name__ == '__main__':
    app.run()

وقمت بتعريف حزمة باسم view والتي سوف تحتوي على بعض ملفات العرض مثل view.tags.py  والذي سيحتوي على كود مثل:

from flask import Flask
app = Flask(__name__)

@app.route('/hi')
def hello():
    return 'Hello, World!'

لذلك أحتاج إلى وجود الكائن app في الملف main.py لتشغيل الخادم ، وكذلك في ملفات العرض لتسجيل المسارات routes. كيف يمكنني إنشاء كائن app عام ومشاركته بين جميع الملفات والأصناف classes؟

Recommended Posts

  • 1
نشر (معدل)

بداية السؤال مشتت لماذا تسلك طريق معقد لشرح ما تريد في حين يمكنك استبدال السؤال بأخر بسيط وهو:

اقتباس

كيف أقسم مشروع flask إلى عدة أجزاء أو ملفات

الإجابة هنا أنت لست بحاجة إلى مشاركته فإذا عدنا إلى الشرط المعروف والذي نكتبه عادة في المشاريع للتأكد من تنفيذ شئ ما أثناء تشغيل ملف بعينه وهو:

if __name__ == "__main__":
    #app.run(debug = True)

يتضح لنا أن الملف الرئيسي يظهر دائما تحت المسمى __main__ مما يعني أن بالإمكان استيراد اي شئ من الملف الرئيسي داخل ملفات المشروع الفرعية, علي سبيل المثال سيكون app موجود داخل الملف الرئيسي دائما فيمكننا إستيراده من خلال: 

from __main__ import app

ثم تعيد استيراد الملفات من داخل الكود الرئيسي , ولكن بعد الإعلان:

app = Flask(__name__)

 

فيما يلي مثال لمشروع يحتوي على ملفين منفصلين عن الملف الرئيسي

1- error_app.py

#error_app.py
from flask import (request, jsonify)
from __main__ import app


app.config['TRAP_HTTP_EXCEPTIONS']=True

def error_Response(code, name):
    shortname = name.lower().replace(' ', '_')
    error = {'error':{}}
    error['error']['title'] = 'App | {0}'.format(name)
    error['error']['page'] = request.url
    error['error']['name'] = name
    error['error']['code'] = code
    return jsonify(error)

@app.errorhandler(Exception)
def handle_error(e):
    try:
        if e.code < 400:
            return flask.Response.force_type(e, flask.request.environ)
        elif e.code == 404:
            return error_Response("Page Not Found", "The page you're looking for was not found")
        raise e
    except:
        return error_Response("Error", "Something went wrong")

2- ajax_req.py

#ajax_req.py
from flask import (request, jsonify)
import requests
from __main__ import app


URL = 'https://example.com/test'

@app.route('/from_ajax', methods = ['POST'])
def ajax_request():
    req = requests.get(URL).text
    return jsonify(data=req)

3-main.py

#main.py
from flask import (Flask, render_template)


app = Flask(__name__, template_folder='template')

#يجب إضافة الملفات بعد الاعلان عن الكائن الذي يتم استخدامه بداخلها 
#اقصد app
#وجود الإستدعاء قبل ذلك سيؤدي لظهور اخطاء 

import error_app
import ajax_req


@app.route('/')
def index():
    return render_template('send_from_ajax.html')


if __name__ == "__main__":
    app.run(debug = True)

 

لذا أنت لست بحاجة لأي إجراء أخر للتعامل مع مشروع مترامي الأطراف والذي يمكن أن يحتوي على شجرة ملفات متعددة ,فقط أليات بسيطة تكون كافية.

بالتوفيق

تم التعديل في بواسطة Mohammed_Emad

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...