ফ্লাস্কের 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.