اذهب إلى المحتوى

Mohamed Abu Abdo

الأعضاء
  • المساهمات

    31
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو Mohamed Abu Abdo

  1. أعتقد أن الامر اختلط عليك، Flask ليس خادم ويب ، إنه إطار عمل ويحتاج إلى خادم ويب مثل Gunicorn أو Nginx أو Apache ، لقبول طلبات HTTP التي سيعمل عليها بعد ذلك. السبب الذي يجعلنا نفكر في استخدام Nginx و Gunicorn معًا هو أنه بالإضافة إلى كونه خادم ويب ، يمكن لـ Nginx التعامل مع طلبات Gunicorn بشكل افضل والتي تجعل الاداء افضل بكثير. يقوم Gunicorn بمهمة تشغيل تطبيقك وأحد مزاياه هي جعل مشروعك يعمل علي هيئة خيوط معالجة متوازية مما يسمح بإجراء الكثير من العمليات في نفس اللحظة. يستمع Nginx للطلبات الواردة عبر http او https ويعيد توجيهها إلي Gunicorn والذي يدير Flask, اما عن متي يمكنك استخدام Nginx و Gunicorn هو في بيئة الانتاج ان اردت ان يحصل زوار موقعك علي وصول سريع في نفس الوقت وتقسيم للعمليات بشكل سلس , حينها يمكنك استخدام Nginx و Gunicorn, اما ان كان مشروعك بسيط لا يستقبل طلبات كثيفة أو مستخدمين كثر , فلا بأس استمر مع flask built-in server.
  2. تم الحل هنا PyQt5-link from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(554, 401) self.pushButton5 = QtWidgets.QPushButton(Dialog) self.pushButton5.setGeometry(QtCore.QRect(110, 220, 93, 28)) self.pushButton5.setObjectName("pushButton5") self.pushButton8 = QtWidgets.QPushButton(Dialog) self.pushButton8.setGeometry(QtCore.QRect(220, 220, 93, 28)) self.pushButton8.setObjectName("pushButton8") self.pushButton12 = QtWidgets.QPushButton(Dialog) self.pushButton12.setGeometry(QtCore.QRect(320, 220, 93, 28)) self.pushButton12.setObjectName("pushButton12") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setGeometry(QtCore.QRect(104, 150, 101, 20)) font = QtGui.QFont() font.setPointSize(9) font.setBold(True) font.setItalic(False) font.setWeight(75) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.speed = QtWidgets.QLineEdit(Dialog) self.speed.setGeometry(QtCore.QRect(220, 150, 113, 22)) self.speed.setObjectName("speed") self.result = QtWidgets.QLabel(Dialog) self.result.setGeometry(QtCore.QRect(130, 180, 301, 21)) self.result.setText("") self.result.setObjectName("result") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) self.initUI() #New def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.pushButton5.setText(_translate("Dialog", "5")) self.pushButton8.setText(_translate("Dialog", "8")) self.pushButton12.setText(_translate("Dialog", "12")) self.label_2.setText(_translate("Dialog", "Enter Speed")) def initUI(self): #New self.pushButton5.clicked.connect(lambda x: self.calc_distance(5)) #New self.pushButton8.clicked.connect(lambda x: self.calc_distance(8)) #New self.pushButton12.clicked.connect(lambda x: self.calc_distance(12))#New def calc_distance(self,index):#New speed = float(self.speed.text()) #New time_ = float(index)#New distance = speed*time_ #New print(distance, " :KM") #New self.result.setText(str(distance)) #New if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_())
  3. أنشئ دالة تكون مهمتها التحويل الي القيمة التي تريد واستخدم self.pushButton5.clicked.connect في استدعائها ,سوف تكون في حاجة إلي تمرير قيمة كل زر الي الدالة عند الضغط عليه, يمكنك استخدام lambda < علي سبيل المثال, self.pushButton5.clicked.connect(lambda x: self.calc_distance(5)) ال calc_distance هي الدالة الخاصة بنا , بعد ذلك يمكنك عرض القيمة الناتجة في self.result من خلال self.result.setText(str(distance)) واقترح عليك انشاء فانكشن مستقلة يمكنك استدعاء ال clicked.connect بداخلها تابع الكود بعد التعديل from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(554, 401) self.pushButton5 = QtWidgets.QPushButton(Dialog) self.pushButton5.setGeometry(QtCore.QRect(110, 220, 93, 28)) self.pushButton5.setObjectName("pushButton5") self.pushButton8 = QtWidgets.QPushButton(Dialog) self.pushButton8.setGeometry(QtCore.QRect(220, 220, 93, 28)) self.pushButton8.setObjectName("pushButton8") self.pushButton12 = QtWidgets.QPushButton(Dialog) self.pushButton12.setGeometry(QtCore.QRect(320, 220, 93, 28)) self.pushButton12.setObjectName("pushButton12") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setGeometry(QtCore.QRect(104, 150, 101, 20)) font = QtGui.QFont() font.setPointSize(9) font.setBold(True) font.setItalic(False) font.setWeight(75) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.speed = QtWidgets.QLineEdit(Dialog) self.speed.setGeometry(QtCore.QRect(220, 150, 113, 22)) self.speed.setObjectName("speed") self.result = QtWidgets.QLabel(Dialog) self.result.setGeometry(QtCore.QRect(130, 180, 301, 21)) self.result.setText("") self.result.setObjectName("result") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) self.initUI() #New def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.pushButton5.setText(_translate("Dialog", "5")) self.pushButton8.setText(_translate("Dialog", "8")) self.pushButton12.setText(_translate("Dialog", "12")) self.label_2.setText(_translate("Dialog", "Enter Speed")) def initUI(self): #New self.pushButton5.clicked.connect(lambda x: self.calc_distance(5)) #New self.pushButton8.clicked.connect(lambda x: self.calc_distance(8)) #New self.pushButton12.clicked.connect(lambda x: self.calc_distance(12))#New def calc_distance(self,index):#New speed = float(self.speed.text()) #New time_ = float(index)#New distance = speed*time_ #New print(distance, " :KM") #New self.result.setText(str(distance)) #New if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_()) ما كان ينقص مشروعك هو الحركة أو الاستجابة لمؤثر الضغط علي المفاتيح, أولا قمنا ببناء دالة initUI وبداخلها المفاتيح ,عند ضغط اي زر او مفتاح يتم استدعاء الدالة calc_distance ونمرر اليها معلومات او عدد الساعات المتعلقة بالزر المضغوط. وبدورها تحصلي علي السعة من الحقل self,speed ثم ننفذ العملية distance = speed*time_ , الناتج يمكن طباعته في شاشة الاوامر ويمكن عرضه داخل self.result self.result.setText(str(distance)) لا تنسا يجب استدعاء initUI داخل setupUi..
  4. علي اي حال يمكن استخدام التعابير القياسية او المنطقية في بايثون , ساطرح طريقتين الأولي تعتمد علي السطر الذي ارفقته اعلاه , دعنا في البداية نتفق علي ان ما يهمنا من هذا النص هو url الصورة والذي نود الحصول عليه ودمجه في كود html عادي.[إذا كان يهمك شئ اخر غير url في النص ارجو اخطاري ادناه] ولنفرض مبدئيا أن لديك قائمة او list من تلك النصوص . الطريقة الأولي للحل هي البحث عن http او https ضمن السطر , استخدام دالة string.find او rfind ستساعدنا علي معرفة مكان بداية رابط الصورة او url كرقم مجرد. ثم نعيد البحث عن "&quot;" والتي نعتبرها نهاية وسم url او رابط الصورة. يمكننا الحصول علي url عند حصر هذا النطاق. كما يلي it = "&lt;img src=&quot;http://via.placeholder.com/150&quot; /&gt;" start = it.find('https') if it.find('https')>-1 else it.find('http') end = it.rfind('&quot;') url = it[start:end] print(url) '''```output:http://via.placeholder.com/150```''' ثم يمكننا اضافة url الي وسم html بسهولة, res = f'<img src="{url}" />' print(res) '''Output:<img src="http://via.placeholder.com/150" />''' ولتطويرها اليك الكود الكامل: p_list = ["&lt;img src=&quot;http://via.placeholder.com/150&quot; /&gt;", "&lt;img src=&quot;https://via.placeholder.com/image.jpg; /&gt;"] def conv_html(url): return f'<img src="{url}" />' def proc_dec1(p_list): result = [] for it in p_list: if 'img' in it: start = it.find('https') if it.find('https')>-1 else it.find('http') end = it[start:].rfind('.jpg')+4 if it[start:].rfind('.jpg')>-1 else it[start:].rfind('&quot;') step_one = it[start:start+end] step_two = conv_html(step_one) result.append(step_two) return result result = proc_dec1(p_list) print(result) '''Output:['<img src="http://via.placeholder.com/150" />', '<img src="https://via.placeholder.com/image.jpg" />']''' لقد اضفت .jpg علي سبيل المثال ويمكنك التخصيص اكثر اذا كانت بياناتك تتضمن انماطاً مختلفة, اما الطريقة الثانية ,وهي استخدام تعابير re للبحث عن url داخل النص, اليك المثال التالي, import re p_list = ["<img src="http://via.placeholder.com/150" />", "<img src="https://via.placeholder.com/image.jpg; />"] def conv_html(url): return f'<img src="{url}" />' def proc_dec2(p_list): result = [] for it in p_list: step_one = re.search("(?P<url>https?://[^\s]+)", it).group("url") step_two = step_one.replace(';','') out = conv_html(step_two) result.append(out) return result result = proc_dec2(p_list) print(result) '''Output:['<img src="http://via.placeholder.com/150&quot" />', '<img src="https://via.placeholder.com/image.jpg" />']''' ربما تكون re اكثر مرونة عن الطريقة الأولي وهي البحث بشكل شبه مخصص عن url في داخل اي string او سلسلة نصية, وماتزال هناك طرق اخري , برغم جودة هؤلاء وفعاليتهم, لكن اعود لسؤالي الأول هل بيانات تحوي انماطا مختلفة؟؟ اذا كان الامر كذلك ارجو اخطاري وسأقوم بمناقشة الأمر معكم..
  5. السلام عليكم ورحمه الله , هل هذا السطر ثابت؟؟ "&lt;img src=&quot;https://via.placeholder.com/150&quot; /&gt;" او ان هناك اشكال اخري داخل قاعدة بياناتك؟
  6. في Flask يمكنك استخدام ```request.path``` ,والتي ستعطيك العنوان الحقيقي للصفحة الحالية او كما هو في مثالك /register /login لا تنسي كتابتها بنفس الصيغة التالية خاصة وجود / قبل المسار الذي تستعلم عن وجوده. <li {%- if request.path == "/register" %} class="active"{% endif %}> <a href="/register">Register</a> </li> <li {%- if request.path=="/login" %} class="active"{% endif %}> <a href="/login">Login</a> </li> ويمكنك ايضا استخدام ```request.url_rule.endpoint``` والتي ستعطيك أسم الفانكشن المسؤلة عن الصفحة الحالية علي سبيل المثال , @app.route('/home') def my_home(): return render_template('main.html') تصبح قيمة ```request.url_rule.endpoint``` اذا كنا في المسار /home هي my_home ويمكنك تكرار نفس الجمل الشرطية ولكن بطريقة اخري مثلا إذا كان لدينا الاسماء التالية لدالتي login و register, @app.route('/register') def register_func(): return render_template('register.html') @app.route('/login') def my_login(): return render_template('login.html') تصبح الجمل الشرطية كما يلي <li {%- if request.url_rule.endpoint == "register_func" %} class="active"{% endif %}> <a href="/register">Register</a> </li> <li {%- if request.url_rule.endpoint =="my_login" %} class="active"{% endif %}> <a href="/login">Login</a> </li> .
×
×
  • أضف...