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


146

আমার ফ্লাস্ক অ্যাপ্লিকেশনটিতে বর্তমানে একক test.pyফাইল একাধিক রুট এবং main()রুট সংজ্ঞায়িত রয়েছে। আমি এমন কোনও test2.pyফাইল তৈরি করতে পারি যেগুলিতে যেসব রুটগুলি পরিচালনা করা হয়নি সেগুলি অন্তর্ভুক্ত করে test.py?

@app.route('/somepath')
def somehandler():
    # Handler code here

আমি উদ্বিগ্ন যে এখানে অনেকগুলি রুট রয়েছে test.pyএবং আমি এটি চালাতে পারি এমনটি তৈরি করতে চাই python test.py, যা রুটগুলি test.pyএকই ফাইলের অংশ হিসাবে বেছে নেবে । এটিকে কাজ করার জন্য আমার কী কী পরিবর্তন করতে হবে test.pyএবং / অথবা অন্তর্ভুক্ত test2.pyকরতে হবে?

উত্তর:


152

আপনি আপনার পাইপকে একাধিক মডিউলগুলিতে বিভক্ত করতে সাধারণ পাইথন প্যাকেজ কাঠামোটি ব্যবহার করতে পারেন, ফ্লাস্ক ডক্স দেখুন।

যাহোক,

ফ্ল্যাশ অ্যাপ্লিকেশন উপাদান তৈরি করতে এবং কোনও অ্যাপ্লিকেশনের মধ্যে বা অ্যাপ্লিকেশন জুড়ে সাধারণ প্যাটার্নগুলিকে সমর্থন করার জন্য ব্লুপ্রিন্টের ধারণা ব্যবহার করে।

আপনি নিজের অ্যাপ্লিকেশনের একটি উপ-উপাদান একটি পৃথক ফাইলে একটি নীলনকশা হিসাবে তৈরি করতে পারেন:

simple_page = Blueprint('simple_page', __name__, template_folder='templates')
@simple_page.route('/<page>')
def show(page):
    # stuff

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

from yourapplication.simple_page import simple_page

app = Flask(__name__)
app.register_blueprint(simple_page)

ব্লুপ্রিন্টগুলি নির্দিষ্ট সংস্থানগুলিও বান্ডেল করতে পারে: টেম্পলেট বা স্ট্যাটিক ফাইল। সমস্ত বিবরণের জন্য দয়া করে ফ্লাস্ক ডক্স দেখুন।


1
কিভাবে আমরা অন্যান্য ফাইলের মধ্যে নীল নকশা যাত্রাপথ যে থাকতে পারে init যে নীল নকশা?
Divyenduz

আমি যদি জেডাব্লুটিটি ব্যবহার করে সুরক্ষিত শেষ পয়েন্টগুলি তৈরি করতে চাই তবে প্রতিটি রুট.পি ফাইলগুলিতে কীভাবে তা করব
অশোক শ্রী


17

আপনি এমন সহজ কৌশলটি ব্যবহার করতে পারেন যা অন্য কোনও ফাইলের ভিতরে থেকে ফ্ল্যাশ অ্যাপ ভেরিয়েবল আমদানি করে, যেমন:

test-routes.py

from __main__ import app

@app.route('/test', methods=['GET'])
def test():
    return 'it works!'

এবং আপনার প্রধান ফাইলগুলিতে, যেখানে আপনি ফ্লাস্ক অ্যাপ্লিকেশন ঘোষণা করেছেন, পরীক্ষার রুটগুলি আমদানি করুন, যেমন:

app.py

from flask import Flask, request, abort

app = Flask(__name__)

# import declared routes
import test-routes

এটা আমার দিক থেকে কাজ করে।


2
এটি কেবল একটি উদাহরণ, __main__আপনার প্রবেশ ফাইলকে বোঝায়, এটাই!
নিমেষেরাম

3
উজ্জ্বল, অনেক ধন্যবাদ। উপরের ব্লুপ্রিন্ট বা প্যাকেজ পদ্ধতির ছোট অ্যাপ্লিকেশনগুলির জন্য ওভারকিল।
ভিএইচ-এনজেডজেড

এখানে এই নথির যেখানে এখানে এই পদ্ধতিটি ব্যাখ্যা করা হয়েছে তার একটি লিঙ্ক এখানে দেওয়া হয়েছে: https
ক্রিস্টোফার

5

অ্যাপটিকে ব্লুপ্রিন্টগুলিতে ভাগ করা একটি দুর্দান্ত ধারণা। তবে, যদি এটি পর্যাপ্ত না হয় এবং আপনি যদি ব্লুপ্রিন্টকে একাধিক পাই ফাইলগুলিতে ভাগ করতে চান তবে এটি নিয়মিত পাইথন মডিউল আমদানি সিস্টেম ব্যবহার করে এবং অন্যান্য ফাইলগুলি থেকে আমদানিকৃত সমস্ত রুটগুলি লুপ করে নেওয়া সম্ভব possible ।

আমি এটি করার জন্য কোড সহ একটি গিস্ট তৈরি করেছি:

https://gist.github.com/Jaza/61f879f577bc9d06029e

আমি যতদূর সচেতন, এই মুহুর্তে একটি নীলনকশা ভাগ করার একমাত্র সম্ভাব্য উপায় way ফ্লাস্কে "সাব-ব্লুপ্রিন্টস" তৈরি করা সম্ভব নয়, যদিও এ নিয়ে প্রচুর আলোচনার সাথে একটি সমস্যা খোলা রয়েছে:

https://github.com/mitsuhiko/flask/issues/593

এছাড়াও, এটি সম্ভব হলেও (এবং সম্ভবত এটি ইস্যু থ্রেড থেকে কিছু স্নিপেট ব্যবহার করতে সক্ষম হবে), সাব-ব্লুপ্রিন্টগুলি যাইহোক যাইহোক আপনার ব্যবহারের ক্ষেত্রে খুব সীমাবদ্ধ হতে পারে - যেমন আপনি যদি সমস্ত রুট না চান একই ইউআরএল উপ-উপসর্গ থাকতে সাব-মডিউল।


4

এই কাজটি ব্লুপ্রিন্ট এবং কৌশলযুক্ত আমদানি ছাড়াই কেন্দ্রীভূত ইউআরএল মানচিত্র ব্যবহার করে সম্পাদন করা যেতে পারে

app.py

import views
from flask import Flask

app = Flask(__name__)

app.add_url_rule('/', view_func=views.index)
app.add_url_rule('/other', view_func=views.other)

if __name__ == '__main__':
    app.run(debug=True, use_reloader=True)

views.py

from flask import render_template

def index():
    return render_template('index.html')

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