আমি ফ্লাস্ক ব্যবহার করে কোনও ইউআরএল থেকে নামকরণের প্যারামিটারগুলি কীভাবে পেতে পারি?


366

যখন ব্যবহারকারী আমার ফ্লাস্ক অ্যাপ্লিকেশনটিতে চলমান এই ইউআরএলটি অ্যাক্সেস করে, আমি চাই যে ওয়েব পরিষেবা প্রশ্ন চিহ্নের পরে নির্দিষ্ট পরামিতিগুলি পরিচালনা করতে সক্ষম হবে:

http://10.1.1.1:5000/login?username=alex&password=pw1

#I just want to be able to manipulate the parameters
@app.route('/login', methods=['GET', 'POST'])
def login():
    username = request.form['username']
    print(username)
    password = request.form['password']
    print(password)

89
সুরক্ষার জন্য কেবল একটি ছোট্ট ইঙ্গিত: জিইটি অনুরোধে পাসওয়ার্ডগুলি অন্তর্ভুক্ত করবেন না। সিকিউরিটি.স্ট্যাকেক্সেঞ্জাওয়েজ
সেকশনস

6
সুরক্ষার জন্য আরেকটি ছোট ইঙ্গিত: এইচটিটিপি শেষ পয়েন্টগুলিতে পাসওয়ার্ডগুলি প্রেরণ করবেন না (কেবলমাত্র এইচটিটিপিএস)
ডেরমাইক

উত্তর:


591

request.argsক্যোয়ারী স্ট্রিংয়ের পার্সড সামগ্রীগুলি পেতে ব্যবহার করুন :

from flask import request

@app.route(...)
def login():
    username = request.args.get('username')
    password = request.args.get('password')

1
কীভাবে এটি প্যারামিটারগুলি ব্যবহার করে তুলনা করে app.route('/username=<username>&password=<password>')? এইভাবে আপনি অনুরোধ.আরংস.জেট লাইনগুলি মোটেই লিখবেন না।
মাল্টিগডোভার্স

@ মাল্টিগুডেভার্স কেন আপনাকে জিইটি (ইউআরএল) এর মাধ্যমে পাসওয়ার্ড প্রেরণ করবেন না এই প্রশ্নের প্রথম মন্তব্যটি দেখুন। আরও সাধারণভাবে, একটি জিইটি অনুরোধের ?প্যারামিটারগুলির শুরুতে একটি হওয়া উচিত , তাই আপনি চাইবেন app.route('/?username=<username>&password=<password>'), তবে ফ্লাস্ক প্রশ্ন চিহ্নের পরে সবকিছু পড়বে request.argsএবং রুট থেকে চলকগুলি ব্যাখ্যা করবে না। আপনি যদি এইচটিএমএল ফর্মটি ব্যবহার করে আপনার উদাহরণের রুটে যেতে চান তবে এটি কার্যকর করার জন্য আপনার একগুচ্ছ অতিরিক্ত জাভাস্ক্রিপ্টের প্রয়োজন হবে। শেষ অবধি, রুট পরিবর্তনশীলগুলি বাধ্যতামূলক, request.argsbeচ্ছিক হতে পারে।
ডারিক

144

ইউআরএল প্যারামিটারগুলি উপলভ্য request.args, যা একটি ইমট্যুটেবল মাল্টিটিক্টিক্ট যা একটি getপদ্ধতি রয়েছে যেখানে ডিফল্ট মান ( default) এবং টাইপ ( type) - এর জন্য alচ্ছিক পরামিতি রয়েছে - যা কলযোগ্য যা ইনপুট মানকে পছন্দসই বিন্যাসে রূপান্তর করে। ( আরও তথ্যের জন্য পদ্ধতির ডকুমেন্টেশন দেখুন ))

from flask import request

@app.route('/my-route')
def my_route():
  page = request.args.get('page', default = 1, type = int)
  filter = request.args.get('filter', default = '*', type = str)

উপরের কোড সহ উদাহরণ:

/my-route?page=34               -> page: 34  filter: '*'
/my-route                       -> page:  1  filter: '*'
/my-route?page=10&filter=test   -> page: 10  filter: 'test'
/my-route?page=10&filter=10     -> page: 10  filter: '10'
/my-route?page=*&filter=*       -> page:  1  filter: '*'

2
@ কিউকিউনেক.এটি অসামান্য উত্তর! এই বৈশিষ্ট্যটি বা আপনার কোডটির জন্য আমার ফ্লাস্ক পছন্দ করা উচিত কিনা তা আমি জানি না তবে আমি আমার ইউআরএল ইনপুট পার্স করার জন্য ঠিক এটি খুঁজছিলাম।
frakman1

2
filterসংরক্ষিত শব্দ, ব্যবহার করা উচিত নয়;)
ইভান কামিলিটো রামিরেজ ভার্দেস

88

আপনি ভিউ সংজ্ঞাটির ইউআরএলে <> বন্ধনীও ব্যবহার করতে পারেন এবং এই ইনপুটটি আপনার দেখার ফাংশন যুক্তিগুলিতে যাবে

@app.route('/<name>')
def my_view_func(name):
    return name

1
আমি মনে করি এটির উত্তর হওয়া উচিত যেহেতু ডি ফ্লাস্ক ডকুমেন্টেশনের জন্য
এটিই ছিল

31

ইউআরএলটিতে যদি আপনার একক যুক্তি পাস হয় তবে আপনি নীচের মতো এটি করতে পারেন

from flask import request
#url
http://10.1.1.1:5000/login/alex

from flask import request
@app.route('/login/<username>', methods=['GET'])
def login(username):
    print(username)

যদি আপনার একাধিক পরামিতি থাকে:

#url
http://10.1.1.1:5000/login?username=alex&password=pw1

from flask import request
@app.route('/login', methods=['GET'])
    def login():
        username = request.args.get('username')
        print(username)
        password= request.args.get('password')
        print(password)

আপনি পোষ্ট অনুরোধগুলির ক্ষেত্রে কাজ করার চেষ্টা করছেন যেখানে পরামিতিগুলি ফর্ম প্যারামিটার হিসাবে পাস করা হয় এবং ইউআরএলে উপস্থিত হয় না। আপনি যদি একটি লগইন এপিআই প্রকৃতপক্ষে বিকাশ করছেন তবে এটি পরামর্শ দেওয়া হয় আপনি জিইটি না করে পোষ্ট অনুরোধটি ব্যবহার করুন এবং ব্যবহারকারীর কাছে ডেটা উন্মোচন করুন।

পোস্ট অনুরোধের ক্ষেত্রে, এটি নিম্নলিখিত হিসাবে কাজ করবে:

#url
http://10.1.1.1:5000/login

এইচটিএমএল স্নিপেট:

<form action="http://10.1.1.1:5000/login" method="POST">
  Username : <input type="text" name="username"><br>
  Password : <input type="password" name="password"><br>
  <input type="submit" value="submit">
</form>

রুট:

from flask import request
@app.route('/login', methods=['POST'])
    def login():
        username = request.form.get('username')
        print(username)
        password= request.form.get('password')
        print(password)

11

URL:

http://0.0.0.0:5000/user/name/

কোড:

@app.route('/user/<string:name>/', methods=['GET', 'POST'])
def user_view(name):
    print(name)

(সম্পাদনা করুন: ফর্ম্যাট স্ট্রিংয়ে সরানো স্থানগুলি)


-1

এটা সত্যিই সহজ। এই প্রক্রিয়াটি দুটি সহজ ধাপে বিভক্ত করি।

  1. এইচটিএমএল টেমপ্লেটে আপনি ব্যবহারকারীর নাম এবং পাসওয়ার্ডের জন্য নাম ট্যাগ ঘোষণা করবেন

    <form method="POST">
    <input type="text" name="user_name"></input>
    <input type="text" name="password"></input>
    </form>
  2. তারপরে আপনার কোডটি এই রূপে সংশোধন করুন:

    from flask import request
    
    @app.route('/my-route', methods=['POST']) #you should always parse username and 
    # password in a POST method not GET
    def my_route():
      username = request.form.get("user_name")
      print(username)
      password = request.form.get("password")
      print(password)
    #now manipulate the username and password variables as you wish
    #Tip: define another method instead of methods=['GET','POST'], if you want to  
    # render the same template with a GET request too

-2

request.args.get(param)উদাহরণস্বরূপ ব্যবহার করুন :

http://10.1.1.1:5000/login?username=alex&password=pw1
@app.route('/login', methods=['GET', 'POST'])
def login():
    username = request.args.get('username')
    print(username)
    password = request.args.get('password')
    print(password)

কোডের রেফারেন্সযুক্ত লিঙ্কটি এখানে।


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