উত্তর:
আর একটি উপায় লিখতে হয়
@user.route('/<user_id>', defaults={'username': None})
@user.route('/<user_id>/<username>')
def show(user_id, username):
pass
তবে আমি অনুমান করি যে আপনি একটি একক রুট লিখতে চান এবং username
as চ্ছিক হিসাবে চিহ্নিত করতে চান ? যদি এটি হয় তবে আমি মনে করি এটি সম্ভব নয়।
প্রায় কয়েক মাস আগে অড্রিয়াস রান্না করা হিসাবে প্রায় একই, তবে আপনি এটি ফাংশন মাথার ডিফল্টগুলির সাথে কিছুটা বেশি পঠনযোগ্য দেখতে পাবেন - যেভাবে পাইথনের সাথে আপনি অভ্যস্ত:
@app.route('/<user_id>')
@app.route('/<user_id>/<username>')
def show(user_id, username='Anonymous'):
return user_id + ':' + username
username
ধ্রুবক না হলে এটি কাজ করে works defaults=
অভিধানে ডিফল্ট মান হিমায়িত করে।
@user.route('/<userId>/') # NEED '/' AFTER LINK
@user.route('/<userId>/<username>')
def show(userId, username=None):
pass
https://flask.palletsprojects.com/en/1.1.x/quickstart/#unique-urls-redirection-behavior
@app.route('/', defaults={'path': ''})
@app.route('/< path:path >')
def catch_all(path):
return 'You want path: %s' % path
@user.route('/<user_id>', defaults={'username': default_value})
@user.route('/<user_id>/<username>')
def show(user_id, username):
#
pass
প্রায় স্কোরানো হিসাবে একই, তবে আরও সুস্পষ্ট উত্তরের জন্য পরিবর্তনীয় ঘোষণার সাথে। এটি ফ্লাস্ক-রেস্টস্টুল এক্সটেনশনের সাথে কাজ করতে পারে :
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 গুলি পারেন। প্রত্যেককে আপনার রিসোর্সে পাঠানো হবে ।
আমি জানি এই পোস্টটি সত্যিই পুরানো তবে আমি এমন একটি প্যাকেজে কাজ করেছি যা এটি ফ্লস্ক_অপশনাল_রউটিস বলে। কোডটি এখানে অবস্থিত: 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)
আপনি উদাহরণ হিসাবে প্রদর্শিত হিসাবে লিখতে পারেন, কিন্তু আপনি বিল্ড-ত্রুটি পেতে।
এটি ঠিক করার জন্য:
<Rule '/<userId>/<username>' (HEAD, POST, OPTIONS, GET) -> user.show_0>
এবং
<Rule '/<userId>' (HEAD, POST, OPTIONS, GET) -> .show_1>
{{ url_for('.show_0', args) }}
এবং{{ url_for('.show_1', args) }}
ফ্লাস্ক ০.১০ থেকে আপনি এক প্রান্তে একাধিক রুট যুক্ত করতে পারবেন না। তবে আপনি জাল এন্ডপয়েন্টটি যুক্ত করতে পারেন
@user.route('/<userId>')
def show(userId):
return show_with_username(userId)
@user.route('/<userId>/<username>')
def show_with_username(userId,username=None):
pass
আমি মনে করি আপনি ব্লুপ্রিন্ট ব্যবহার করতে পারেন এবং এটি আপনার কোডটিকে আরও সুন্দর এবং ঝরঝরে দেখাবে।
উদাহরণ:
from flask import Blueprint
bp = Blueprint(__name__, "example")
@bp.route("/example", methods=["POST"])
def example(self):
print("example")