ফ্লাস্কের URLচ্ছিক ইউআরএল প্যারামিটার থাকতে পারে?


258

এটি সরাসরি ফ্লাস্ক ইউআরএল alচ্ছিক প্যারামিটার ঘোষণা করা সম্ভব?

বর্তমানে আমি নিম্নলিখিত উপায়ে এগিয়ে যাচ্ছি:

@user.route('/<userId>')
@user.route('/<userId>/<username>')
def show(userId, username=None):
    pass

আমি কীভাবে সরাসরি এটি বলতে পারি যে usernameএটি ?চ্ছিক?

উত্তর:


341

আর একটি উপায় লিখতে হয়

@user.route('/<user_id>', defaults={'username': None})
@user.route('/<user_id>/<username>')
def show(user_id, username):
    pass

তবে আমি অনুমান করি যে আপনি একটি একক রুট লিখতে চান এবং usernameas চ্ছিক হিসাবে চিহ্নিত করতে চান ? যদি এটি হয় তবে আমি মনে করি এটি সম্ভব নয়।


শেষ পয়েন্ট এবং url_for উল্লেখ করার সময় এই পদ্ধতিটি ব্যবহার করে কোনও সমস্যা?

2
আমি যে জানি না। এমনকি ফ্লাস্ক ডক্সেও অনুরূপ উদাহরণ রয়েছে (এটি দেখতে আপনাকে কিছুটা নিচে স্ক্রোল করতে হবে)।
— অড্রিয়াস কৌকৌসকাস

1
আপনি প্লাস ইনস্টল flask_optional_routes চেষ্টা করতে পারেন। আপনি যে কার্যকারিতার জন্য খ / সি অনুরোধ করছেন তার জন্য আমি একটি পাইপ তৈরি করেছি আমার এটিরও প্রয়োজন। কোডটি এখানে অবস্থিত: github.com/sudouser2010/flask_optional_routes ।
— সুডৌসার2010

upvoted! যদি আপনার হোম পৃষ্ঠায় একাধিক ট্যাব থাকে যেখানে প্রত্যেকে / এক / দুই / তিন / চার জাতীয় কিছু ট্রিগার করে এবং আপনি পৃষ্ঠাটি পুনরায় লোড না করে একই পৃষ্ঠাতে বিভিন্ন সামগ্রী লোড করতে চান, আপনি কি একক রুট বা একাধিক রুট ব্যবহার করবেন?
— পাইরেটঅ্যাপ

@ পাইরেট অ্যাপ যা কেবল ফ্লাস্কের সাথে অর্জন করা যায় না এবং এটি পুরোপুরি একটি সম্মুখভাগের বৈশিষ্ট্য
— qaisjp

183

প্রায় কয়েক মাস আগে অড্রিয়াস রান্না করা হিসাবে প্রায় একই, তবে আপনি এটি ফাংশন মাথার ডিফল্টগুলির সাথে কিছুটা বেশি পঠনযোগ্য দেখতে পাবেন - যেভাবে পাইথনের সাথে আপনি অভ্যস্ত:

@app.route('/<user_id>')
@app.route('/<user_id>/<username>')
def show(user_id, username='Anonymous'):
    return user_id + ':' + username

3
এছাড়াও, usernameধ্রুবক না হলে এটি কাজ করে works defaults=অভিধানে ডিফল্ট মান হিমায়িত করে।
— kasperhj

2
আমি এই এক পছন্দ। আমাদের কোডটি যতটা সম্ভব পরিষ্কার করা উচিত।
— লাইট.জি

মনে রাখবেন এখানে একটি বড় সাবধানবাণী রয়েছে: আপনার যদি একাধিক অবস্থানগত আর্গুমেন্ট থাকে এবং সেগুলি সমস্ত alচ্ছিক না হয় তবে ফ্ল্যাশ বুঝতে পারবেন না কীভাবে URL টি সঠিকভাবে তৈরি করা যায়। আপনি / পৃষ্ঠার মতো কিছু পেতে পারেন? আরগ = ফু যেখানে এটি / ফু / পৃষ্ঠা হওয়া উচিত। @ অড্রিয়াস কৌকুউস্কাস উত্তর সেই ক্ষেত্রে কাজ করে, তবে এটি হয় না
— rgargente

73

আপনি যদি আমার মতো ফ্লাস্ক-রেস্টফুল ব্যবহার করে থাকেন তবে এটিও এইভাবে সম্ভব:

api.add_resource(UserAPI, '/<userId>', '/<userId>/<username>', endpoint = 'user')

আপনার রিসোর্স ক্লাসে একটি তখন:

class UserAPI(Resource):

  def get(self, userId, username=None):
    pass


11
@app.route('/', defaults={'path': ''})
@app.route('/< path:path >')
def catch_all(path):
    return 'You want path: %s' % path

http://flask.pocoo.org/snippets/57/


3
আপনার এখানে বাহ্যিক লিঙ্ক থেকে তথ্য যুক্ত করা উচিত কারণ যদি সেই লিঙ্কটি আর কার্যকর হয় না, তবে আপনার উত্তর ক্ষতিগ্রস্থ হবে।
— tomab


5

প্রায় স্কোরানো হিসাবে একই, তবে আরও সুস্পষ্ট উত্তরের জন্য পরিবর্তনীয় ঘোষণার সাথে। এটি ফ্লাস্ক-রেস্টস্টুল এক্সটেনশনের সাথে কাজ করতে পারে :

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class UserAPI(Resource):
    def show(userId, username=None):
    pass

api.add_resource(UserAPI, '/<userId>', '/<userId>/<username>', endpoint='user')

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

add_resourceপদ্ধতি পাস গুণিতক URL গুলি পারেন। প্রত্যেককে আপনার রিসোর্সে পাঠানো হবে ।


1

আমি জানি এই পোস্টটি সত্যিই পুরানো তবে আমি এমন একটি প্যাকেজে কাজ করেছি যা এটি ফ্লস্ক_অপশনাল_রউটিস বলে। কোডটি এখানে অবস্থিত: https://github.com/sudouser2010/flask_optional_routes ।

from flask import Flask

from flask_optional_routes import OptionalRoutes


app = Flask(__name__)
optional = OptionalRoutes(app)

@optional.routes('/<user_id>/<user_name>?/')
def foobar(user_id, user_name=None):
    return 'it worked!'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

0

আপনি উদাহরণ হিসাবে প্রদর্শিত হিসাবে লিখতে পারেন, কিন্তু আপনি বিল্ড-ত্রুটি পেতে।

এটি ঠিক করার জন্য:

  1. আপনি মুছে অ্যাপ.আরএল_ম্যাপ () কে .পি
  2. আপনি কিছু দেখতে পাবেন:

<Rule '/<userId>/<username>' (HEAD, POST, OPTIONS, GET) -> user.show_0>

এবং

<Rule '/<userId>' (HEAD, POST, OPTIONS, GET) -> .show_1>

  1. টেমপ্লেট তুলনায় আপনি যা করতে পারেন {{ url_for('.show_0', args) }}এবং{{ url_for('.show_1', args) }}

-6

ফ্লাস্ক ০.১০ থেকে আপনি এক প্রান্তে একাধিক রুট যুক্ত করতে পারবেন না। তবে আপনি জাল এন্ডপয়েন্টটি যুক্ত করতে পারেন

@user.route('/<userId>')
def show(userId):
   return show_with_username(userId)

@user.route('/<userId>/<username>')
def show_with_username(userId,username=None):
   pass

5
কি? এখানে ফ্লাস্ক 0.10.1 ব্যবহার করে আমি এক প্রান্তে একাধিক রুট যুক্ত করতে পারি ঠিক ঠিক।
— জাপজ

-8

আমি মনে করি আপনি ব্লুপ্রিন্ট ব্যবহার করতে পারেন এবং এটি আপনার কোডটিকে আরও সুন্দর এবং ঝরঝরে দেখাবে।

উদাহরণ:

from flask import Blueprint

bp = Blueprint(__name__, "example")

@bp.route("/example", methods=["POST"])
def example(self):
   print("example")

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