जवाबों:
दूसरा तरीका है लिखना
@user.route('/<user_id>', defaults={'username': None})
@user.route('/<user_id>/<username>')
def show(user_id, username):
pass
लेकिन मुझे लगता है कि आप एकल मार्ग लिखना चाहते हैं और username
वैकल्पिक के रूप में चिह्नित करना चाहते हैं ? अगर ऐसा है, तो मुझे नहीं लगता कि यह संभव है।
लगभग कुछ महीने पहले ऑड्रीस के रूप में ही पकाया जाता है, लेकिन आप इसे फ़ंक्शन हेड में चूक के साथ थोड़ा अधिक पठनीय पा सकते हैं - जिस तरह से आप अजगर के साथ उपयोग किए जाते हैं:
@app.route('/<user_id>')
@app.route('/<user_id>/<username>')
def show(user_id, username='Anonymous'):
return user_id + ':' + username
username
स्थिर नहीं है। 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
लगभग कंकोनों के समान, लेकिन अधिक स्पष्ट उत्तर के लिए चर घोषणाओं के साथ। यह फ्लास्क-रेस्टफुल एक्सटेंशन के साथ काम कर सकता है :
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
विधि पास गुणकों यूआरएल अनुमति देता है। हर एक को आपके संसाधन में भेजा जाएगा ।
मुझे पता है कि यह पोस्ट वास्तव में पुरानी है, लेकिन मैंने एक पैकेज पर काम किया है जो इसे फ्लास्क_ओप्शनल_रूट्स कहते हैं। कोड यहां स्थित है: 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) }}
फ्लास्क 0.10 के बाद से आप एक समापन बिंदु पर कई मार्ग जोड़ सकते हैं। लेकिन आप नकली समापन बिंदु जोड़ सकते हैं
@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")