পাইথন ফ্লাস্ক অ্যাপটিকে একাধিক ফাইলে বিভক্ত করুন


91

ফ্ল্যাশ অ্যাপ্লিকেশনটিকে একাধিক ফাইলে কীভাবে ভাগ করা যায় তা বুঝতে আমার সমস্যা হচ্ছে।

আমি একটি ওয়েব সার্ভিস তৈরি করছি এবং আমি এপিআইকে বিভিন্ন ফাইলে (অ্যাকাউন্টএপিআইপি, আপলোডপিআইপি, ...) বিভক্ত করতে চাই, কেবল আমার কাছে একটি বিশাল অজগর ফাইল নেই।

আমি পড়েছি যে আপনি ব্লুপ্রিন্টগুলির সাহায্যে এটি করতে পারেন তবে আমি পুরোপুরি নিশ্চিত নই যে আমার জন্য রুটটি সঠিক।

শেষ পর্যন্ত আমি একটি প্রধান পাইথন ফাইল চালাতে চাই এবং অন্যান্য ফাইলগুলি অন্তর্ভুক্ত করতে চাই যাতে এটি যখন চালিত হয় তখন তাদের একটি বড় ফাইল হিসাবে বিবেচনা করা হয়।

উদাহরণস্বরূপ যদি আমার মেইন.পি এবং অ্যাকাউন্টএপিআইপি থাকে তবে আমি এটি করতে সক্ষম হতে চাই:

মেইন.পি:

from flask import Flask
import AccountAPI

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

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

অ্যাকাউন্টএপিআইপি:

@app.route("/account")
def accountList():
    return "list of accounts"

আমি এই উদাহরণ দিয়ে জানি এটি স্পষ্টতই কাজ করবে না, তবে এর মতো কিছু করা কি সম্ভব?

ধন্যবাদ

উত্তর:


163

হ্যাঁ, ব্লুপ্রিন্টগুলি এটি করার সঠিক উপায়। আপনি যা করার চেষ্টা করছেন তা এইভাবে অর্জন করা যেতে পারে:

মেইন.পি

from flask import Flask
from AccountAPI import account_api

app = Flask(__name__)

app.register_blueprint(account_api)

@app.route("/")
def hello():
    return "Hello World!"

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

অ্যাকাউন্টএপিআইপি

from flask import Blueprint

account_api = Blueprint('account_api', __name__)

@account_api.route("/account")
def accountList():
    return "list of accounts"

যদি এটি কোনও বিকল্প হয়, তবে আপনি পরিষ্কারভাবে আলাদা করতে পৃথক URL / ব্লুপ্রিন্টগুলির জন্য বিভিন্ন URL উপসর্গগুলি ব্যবহার করার বিষয়ে বিবেচনা করতে পারেন। উপরের register_blueprintকলটিতে সামান্য পরিবর্তন করে এটি করা যেতে পারে :

app.register_blueprint(account_api, url_prefix='/accounts')

আরও ডকুমেন্টেশনের জন্য, আপনার সরকারী দস্তাবেজগুলিতে এক নজর থাকতে পারে ।


এটি আমার জন্য পুরোপুরি কাজ করেছে ধন্যবাদ! আমি অনুমান করি যে আমার আরও বেশি সতর্কতার সাথে ব্লুপ্রিন্ট ডক্সটি পড়া উচিত ছিল।
ব্যবহারকারী 1751547

আরে, আমার একটা প্রশ্ন আছে উপরের কোডটি অনুসরণ করে, অ্যাকাউন্টলিস্টের জন্য কী ইউআরএল 'ডোমেন / অ্যাকাউন্টস / অ্যাকাউন্ট' মেলে?
jeyraof

4
মেইন.পি এবং অ্যাকাউন্টএপিআইপি-র কোনও শেয়ারের বৈশ্বিক চলক থাকতে পারে যা ফাইলগুলির মধ্যে একটিতে রয়েছে?
ম্যাচফ্যাং

accountListক্লাসের ভিতরে একই ফাইলের জন্য কোনও সহজ সমাধান আছে?
জিএ 1

মনোমুগ্ধকর মতো কাজ করেছেন, আরও কীভাবে পৃথক .py ফাইলগুলিতে JWT ব্যবহার করে সুরক্ষিত শেষ পয়েন্ট যুক্ত করবেন
অশোক শ্রী

41

Blueprintআপনি ব্যবহার করে আপনার রুটগুলিতে যুক্ত করতে পারেনroutes ডিরেক্টরিতে ।

কাঠামো

app.py
routes
    __init__.py
    index.py
    users.py

__init__.py

from flask import Blueprint
routes = Blueprint('routes', __name__)

from .index import *
from .users import *

index.py

from flask import render_template
from . import routes

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

ইউজার.পি

from flask import render_template
from . import routes

@routes.route('/users')
def users():
    return render_template('users.html')

app.py

from routes import *
app.register_blueprint(routes)

যদি আপনি একটি নতুন রুট ফাইল যোগ, বলতে চান accounts.py, আপনি শুধু ফাইল তৈরি করতে হবে accounts.pyযে routesডিরেক্টরি, ঠিক index.pyএবং users.pyতারপর, এটা আমদানি routes.__init__.pyফাইল

from .accounts import *

4
এটি একটি আমদানি ত্রুটি ছুড়ে
দিচ্ছে

ফাইলের মাঝখানে আমদানি করা কি খারাপ অভ্যাস হিসাবে বিবেচিত হতে পারে?
টমসওয়ার

3

আপনি যদি ব্লুপ্রিন্ট ব্যবহার করছেন এবং আপনি যে টেম্পলেটটি ব্যবহার করছেন তার অভ্যন্তরে আপনার ব্লুপ্রিন্টের url এ রুট / পুনঃনির্দেশ করতে চান তবে আপনাকে সঠিক url_for বিবৃতি ব্যবহার করতে হবে।

আপনার ক্ষেত্রে যদি আপনি নিজের ব্লুপ্রিন্টের ইউআরএল অ্যাকাউন্ট খুলতে চান তবে আপনাকে এটি আপনার টেম্পলেটে এটি বর্ণনা করতে হবে :

href="{{ url_for('account_api.account') }}"

এবং মূল অ্যাপ্লিকেশনটির জন্য এটি দেখতে এই রকম হবে:

redirect(url_for('account_api.account'))

অন্যথায় ওয়ার্কজেগ লাইব্রেরি একটি ত্রুটি নিক্ষেপ করবে।


1

এটি করার আরেকটি উপায় অলস লোডিংয়ের সাথে হতে পারে , যেখানে আপনি প্রয়োজনের ভিত্তিতে স্পষ্টভাবে ভিউ ফাংশন সংযুক্ত করবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.