redirect user to a login form python

Hadeel Mohammed • منذ 6 سنوات

السلام عليكم

 

عملت بال HTML


<html>
  <body>
     <form action = "http://localhost:27017/login"method = "POST">
        <p>Name:</p>
        <p><input type = "text" name = "username" placeholder="Username"/></p>
        <p>Phone No.:</p>
        <p><input type="tel" Phone= "Phone" placeholder="Phone"/></p>
        <p><input type = "submit" value = "submit"/></p>
     </form>  

    </body>
 
</html>

و بال  PyMongo

هنا حطيت الداتا


from pymongo import MongoClient
     
if __name__ == '__main__':
     client = MongoClient('localhost', 27017)
     db = client['mongoDatabaseDemo']
     collection_user = db['login']
     new_login = collection_user.insert_many(
        [
             {
                  'name':'Ali',
                   "Phone No": '0551873725'
             },
             {
                  "name":"Ahmad",
                   "Phone No": '0566138249'
             },
             {
                  'name':'Mohammed',
                   "Phone No": '0505274618'
             },
             {
                  "name":"Hadeel",
                   "Phone No": '0504726381'
             }
       ]
    )

 

 

والمشكله هنا في ال Python Code


from flask import Flask, redirect, url_for, request

     
app = Flask(__name__)

@app.route('/success/<name>')
def success(name,Phone):
   return 'welcome %s' %name

@app.route('/login',methods = ['POST', 'GET'])
def views():
    if request.method == 'POST':
      name = request.form['name']
      Phone = request.form['Phone']
      return redirect(url_for('success',name = name, Phone = Phone))
    else:
      name = request.args.get('name')
      Phone = request.args.get('Phone')
      return redirect(url_for('success',name = name, Phone = Phone))


if __name__ == '__main__':

   app.run(debug = True)

 

اللي ابغا اسويهه انو ادخل الاسم ورقم الجوال

المشكله اني جديده على البايثون ف ماعرفت ايش الغلط

كلمات دليلية:

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (3)

1337r00t • منذ 6 سنوات

الخطا الأول في كود HTML


<input type="tel" Phone= "Phone" placeholder="Phone"/>

الخطأ هو وضعك ل Phone="Phone"  يجب ان يكون  name="Phone" i هكذا :-


<input type="tel" name="Phone" placeholder="Phone"/>

-------------------

الخطأ الثاني في كود الفلاسك عشان يكون بعلمك انتي كتبتي :-


name = request.form['name']

وبرضو هنا :-


name = request.args.get('name')

وانتي كاتبه بكود الHTML


<input type = "text" name="username" placeholder="Username"/>

 

الخطا بكود البايثون فلاسك انك جعلتي يأخذ متغير ك اسم برامتر غير موجود اصلا

 

الحل عن طريك تغير name الى username :-


name = request.form['username']

ونفس الشيء بالنقطة الثانية اللي ذكرتها لك


name = request.args.get('username')

---------------

الخطأ الثالث اللي بيجيك : عدم المعالجة الصحيحة للبرامترات POST


redirect(url_for('success',name = name, Phone = Phone))

name = name -> ماراح يستجيب للأسم اللي ادخلتيه بسبب هالسطر

بعد التعديل:-


return redirect(url_for('success',username = username, Phone = Phone))

 

اتمنى ان هذا الحل

 

اذا واجهتي مشكلة اخرى فصليها كتابيا وبالصور عشان نقدر نساعدك

سطام • منذ 6 سنوات

علاوة على إجابة أخي @1337r00t

لا أرى أي استخدام لمعطيات الطلب request arguments   في ال query string بحكم إن الطلب من نوع POST على مسار ال login

ولا يوجد تحويل redirect لنفس المسار لمعالجة هذه المعطيات، لذلك لا فائدة من استخدام request.args

 

الخلل بنظري عدم ضبط التسلسل المنطقي للطلبات requests من مسار login إلى مسار success  مع الأخذ بالاعتبار نوع الطلب POST,GET .

 

 

 

سطام • منذ 6 سنوات

هذا التسلسل الصحيح للانتقال من مدخلات النموذج Form إلى مسار الوجهة.

لم أضمن جزئية قواعد البيانات pymongo لأن القصاصة لم تشمل إضافة أو استعلام عن البيانات بعد تعبئتها بالكود.

 


from flask import Flask, redirect, request, url_for

login_form = '''
<html>
  <body>
     <form action="/login" method="POST">
        <p>Name:</p>
        <p><input type="text" name="username" placeholder="Username"/></p>
        <p>Phone No.:</p>
        <p><input type="tel" name="phone" placeholder="Phone"/></p>
        <p><input type="submit" value="submit"/></p>
     </form>  
    </body>
</html>
'''

app = Flask(__name__)


@app.route('/')
def index():
    return "<a href='/login'>Login</a>"


@app.route('/success')
def success():
    name = request.args.get('name')
    phone = request.args.get('phone')
    return 'Welcome {}, Your phone number is {}'.format(name or 'Guest', phone)


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        name = request.form.get('username')
        phone = request.form.get('phone')
        return redirect(url_for('success', name=name, phone=phone))
    else:
        return login_form


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

 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !