الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشروع جماعي : تطبيق BottlePaste

مثبّترائج
بدأه a.atalla في 28 أبريل 2013 · 156 رد · 13,739 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#126

احذف السطر

 

current = aaa.current_user.username
#127

السلام عليكم ورحمة الله وبركاته

 

 

تم بفضل الله

 

تفعيل سكربت contact وبرمجته بشكل جيد ﻻرسال البريد(عملت بريد خاص للموقع) موجود في الكود

 

المهم ضع في سكربت app

 

بسم الله

 

def send_email(author,message,subject):
	username = 'bottle.pastebin@gmail.com'  
	password = '05060708q'  
	smtp='smtp.gmail.com:587'
	admin = 'bottle.pastebin@gmail.com'
	info_contact = string.join((
		"author: %s" % author,
        "To: %s" % admin,
        "Subject: %s" % subject,
        '',message
        ), "\r\n")
	
	server = smtplib.SMTP(smtp)  
	server.starttls()  
	server.login(username,password)
	server.sendmail(author, [admin], info_contact)

 

ومن ثم ضع هذا الكود

 

@route("/Contact")
def contact():
    return template('templates/contact.html',last5=last_five())
    
@post('/contact')
def cont():
	author = request.forms.get('author_email')
	message = request.forms.get('new_message')
	subject = request.forms.get('subject')
	error = ['Please enter all information']
	if author == '' and message == '' and subject =='':
		return template('templates/contact.html',error=error,lasrt5=last_five())
	send_email(author,message,subject)
	return 'Your message has been sent successfully'

 

والتمبلت

 

 

 

 

{% extends 'base.html' %}

{% block info %}
<div class="jumbotron well">
	
<h3>Contact us</h3>

	
	<style type='text/css'>
		color:Red
	</style>
    <form accept-charset="UTF-8" action="/contact" method="POST">
		
		email  <input type="text" name="author_email" id=""  placeholder='give us your email'/><br/>
		 subject  <input type = 'text' name = 'subject' placeholder = 'subject . . . . . . . '><br/>
         message <textarea class="span4" id="new_message" name="new_message"
        placeholder="Type in your message" rows="5"></textarea>
        
        <button class="btn btn-info" type="submit">Send Message!</button>
    </form>
	

<div class = 'error'>
		{{error}}
	</div>
</div>


{% endblock %}

 

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

 

لدي سؤال , استاذ احمد

 

 

كيف تريد ان تعطي صﻻحية للمستخدم المسجل وانت لم تعمل سكربت تسجيل , هل هذا قصدك ام انا فهمته خطأ

 

هل تريد ان نقوم بعمله

تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 20 مايو 2013 في 23:28

salah.jpg

#128

لقد قمت بعمل سكربت التسجيل 

لا ادري ان قام الاخ احمد بدمجه ام لا


جاري تجربة Contact

هل انتهيت من الامتحانات اخ مصطفى
#129

ﻻ والله اليوم امتحنت اﻻمتحان الثالث , ﻻكن غدا لدي امتحان سهل لم ياخذ مني وقت كثير واستغللت وقت الفراغ في برمجة مدونتي اريد اكملها وايضا اتى في بالي هذا المشروع !!

 

 

صراحة لم ارى سكربت التسجيل !!

تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 21 مايو 2013 في 00:13

salah.jpg

#130
راجع المستودع الخاص بالمشروع

 

وبالتوفيق في الامتحانات ان شاء الله
#131

المهم جربت contact !?

salah.jpg

#132
لا ليس بعد
 
او راجع المستودع الخاص بي
ولا تنسى اضافة المكتبات الخارجية المستعملة
انظر الى التعليقات السابقة

https://bitbucket.org/redatest/bottlepaste

تم تعديل هذه المشاركة بواسطة med reda في 21 مايو 2013 في 00:39

#133

لدي سؤال : هل سكربت example_conf.py

 

انت كتبته ام هذا افتراضي !

salah.jpg

#134
لا لم اكتبه
لكن على ما اعتقد يأتي مع المكتبة التي اضفتها bottle-cork
كذلك استعنت بالمكتبات beaker

pycrypto

#135

هل يوجد لها مصادر لكي اتعلمها او افهمها بشكل جيد من غير هذا الموقع

 

 

http://cork.firelet.net/

ﻻنها مكتبة ذكية ومفيدة ومختصرة باكوادها جدا وفيها مميزات غنية

salah.jpg

#136
تم تصليح ال Contact

لكن لماذا قعت بتغيير الباس اخ مصطفى ههه

 

بالنسبة للمكتبة bottle-cork عليك مراجعة الشرح في الموقع الخاص بها لانه لا يجد مصدر اخر

 

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

 

ملاحظة : لقد قمت بتعديل المكتبة حتى يتسنى للمستخدم التسجيل مباشرة دون التفعيل بواسطة الايميل

 

لقد تم اظافة التعديلات الى المستودع الخاص بي


 

سيتم تعديل التمبلايت لاحقا

تم تعديل هذه المشاركة بواسطة med reda في 21 مايو 2013 في 17:06

#137

ﻻ يااخي لم اغير واللهﻻكن في البداية اول مانزلت الكود نسيت ان اغير اﻻميل والباسورد الخاص بي !!

salah.jpg

#138
امزح فقط 

ولكن هل جربت التعديلات الاخيرة
#139

سوف يتم البدا في برمجة الولوج باستخدام الفيسبوك

#140

هل من متابع

تم تعديل هذه المشاركة بواسطة med reda في 28 مايو 2013 في 16:23

#141
تم اضافة خاصية التسجيل بواسطة الفايسبوك

كما تم تحسين بعض الامور .

اترك لكم الامر لاكتشافها


 

ارجوا منكم التجربة لمعرفة ان كان فيه اخطاء ام لا

تم تعديل هذه المشاركة بواسطة med reda في 29 مايو 2013 في 02:31

#142

سيتم الشروع في اضافة خاصية التسجيل بعد الحكم على الاضافة الاخيرة

#143

السلام عليكم :

 

ما شاء الله اضافة جميلة ..؟ اعتقد ان مكتبة فيس بوك لبايثون افضل من تويتر !! فيها دوال ﻻتوجد لتويتر !؟ مثل تسجيل الدخول !! في تويتر يتم التسجيل عن طريق معلومات تسجل فيها بحسابك في موقع المكتبة

 

 

هل لي بشرح هذا الكود (ﻻكن بحثت لم اجد كود شبيه لكودك الذي استعملته في سكربت app

 

ACCESS_TOKEN = params[0].split('=')[1]
	EXPIRE = params[1].split('=')[1]
	
	response, content = http.request('https://graph.facebook.com/me?access_token=%s' % ACCESS_TOKEN)
	data = json.loads(content)
	
	graph = facebook.GraphAPI(ACCESS_TOKEN)
	profile = graph.get_object("me")

salah.jpg

#144
وعليكم السلام 
اخ مصطفى
قبل البدا في الشرح
سادلك على طريقة لتفهم بها الاكواد الصعبة في المستقبل 
قم دائما باستعمال الدالة print لاضهار محتوى المتغيرات التي فيها غموض
كذلك استعمل الدالة type() لمعرفة نوع المتغير 
او استعمل لمشاهدة سير البرنامج خطوة خطوة
 
الان نرجع الى سوألك :
طبعا لم تجد مثي له في النت لاني قمت بفهم المكتبة اولا ثم كتبت الكود الخاص بي
واستغرق الامر بضع ساعات لكن لابأس
 
بالنسبة للسطر الاول:
 
محتوى المتغيرparams هو:

 

 

['access_token=CAAFXP6P6PPsBAEyQBeC3JzYclirFeXwOKfqegFISWiZBBe...............bArAZCTuZC3k', 'expires=5183849']

 

 

اي عبارة عن list بها عنصرين access_token and expire

 

access_token هو الرمز الذي نحتاجه للتواصل مع الـ للفايسبوك

 

 
expire هو تاريخ انتهاء صلاحية هذا الرمز
 
اذا:
[params[0 تساوي

 

['ACCESS_TOKEN=CAAFXP6P6PPsBAEyQBeC3JzYc']

 

 

 

 

 
اي انها سلسلة نصية عادية والتي يمكن ان نلاحظ انها تحتوي على الرمز= الذي يفصل access_token بين وقيمته
 
الستخراج قيمة هذا الاخير يمكننا استعمال الدالة split
والنتيجة المتحصل عليها بعد استعمال الدالة الاخيرة هي عبارة عن list ايضا على الشكل:
 
['CAAFX..','CAAFXP6']

 

 

 
لنفترض اننا وضعنا قيمة النتيجة الاخيرة في المتغير result
اي اننا قسمنا التعليمة كما يلي
 
ACCESS_TOKEN = params [0]
result = ACCESS_TOKEN.split('=')

 

 

 

 
ومنه يمكن الحصول على قيمة باستخراج العنصر الثاني للنتيجة الاخيرة كما يلي:
result[1]

تم تعديل هذه المشاركة بواسطة med reda في 2 يونيو 2013 في 15:53

#145

بالنسبة الى:

response, content = http.request('https://graph.facebook.com/me?access_token=%s' % ACCESS_TOKEN)

 

 

هنا قمنا باستخدام الدالة request للمكتبة httplib2
ووظيفة الدالة الاخيرة هي ارسال http request والنتيجة هي عبارة عن tuple من الشكل(response, content)
 
يمكنك التعرف على هذه الدالة اكثر كما يلي:
 
httplib2.Http.request.__doc__

 

حيث ان response قيمتها هي:

 

{'status': '200', 'content-length': '302', 'content-location': 'https://graph.facebook.com/me?access_token=CAAFXP6P6PPsBAJRGX....weV69oXNKLbvXZA7fERLquvSW.....ZCZCmP7f0sTwsL6rjsvDyZA3xv1Jj2yHTMQlot0CAo4xrf254H4njp31ewBkWVOaOeCOjhZA', 'last-modified': '2012-12-22T20:57:11+0000', 'expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'x-fb-rev': '832557', 'connection': 'keep-alive', 'etag': '"fbbddb.......5b320e6f2d1d1"', 'pragma': 'no-cache', 'cache-control': 'private, no-cache, no-store, must-revalidate', 'date': 'Sun, 02 Jun 2013 12:56:35 GMT', 'access-control-allow-origin': '*', 'content-type': 'text/javascript; charset=UTF-8', 'x-fb-debug': 'xpLWuRLdinw....QsmuB1X9MPSE0+o='}

 

لتفهم اكثر راجع :

http://en.wikipedia.org/wiki/List_of_HTTP_headers#Responses

 

و content قيمتها هي:

 

{"id":"10033.....3792","name":"facebook_name ","first_name":"reda","last_name":"med","link":"http:\/\/www.facebook.com\/firstname.lastname","username":"med.reda","gender":"male","email":"email\u0040gmail.com","timezone":3,"locale":"En, us","verified":true,"updated_time":"2012-12-22T20:57:11+0000"}

 

 

 

واخيرا يمكن ان تلاحظ انه تم فعلا جلب المعلوما ت حول المستخدم الا كلمة السر لانها
مشفرة ولا يمكن حتى لمسيري الفايسبوك الاطلاع عليها.

 

 

بعد ذلك يمكن تحويل ال content الى كائن من نوع dict لاستخدامه لاحقا
وذلك باستخدام الدالة loads
 
ملاحظة : الدالة loads تقوم بشيء اخر لكني تعمدت الشرح هكذا لكي لا اطيل
 
بالمناسبة :
يمكن الاستغناء عن السطرين 
 
graph = facebook.GraphAPI(ACCESS_TOKEN)
	profile = graph.get_object("me")

 

 

واخيرا اترك لك الباقي لتكتشفه وحدك

تم تعديل هذه المشاركة بواسطة med reda في 2 يونيو 2013 في 16:46

#146

جميل الشرح عاشت يدك ومفهوم والله ,,  صراحة لم اجرب قبل ان اسند قيم لمتغيرين اﻻ نادرا !!

 

واشكرك على نصيحة جزاك الله خيرا .

salah.jpg

#147
اذا كانت المشكلة في اسناد الناتج الى متغيرين
 
يمكنك الاسناد كما شئت بشرط ان يكون عدد المتغيرات مساو لعدد القيم
كما يمكنك استعمال ال list
 
a ,b, c = [1, 2, 3]

 

 

 
هناك شئ ثاني
 
اذا اردت ان تطبيق الفايسبوك الخاص بك يجب ان تنشئ ال facebook app
 
وذلك للحصول على
FACEBOOK_APP_ID
FACEBOOK_APP_SECRET
سوف اضيف الشرح في المساء ان شاء الله

تم تعديل هذه المشاركة بواسطة med reda في 2 يونيو 2013 في 18:29

#148

, ﻻ اشكرك . ﻻكن شوي المكتبة فيها حماس اكثر من مكتبة تويتر ! سبق وشرحت مكتبة تويتر يمكنك ان تراه

 

 

Twitter and Python

salah.jpg

#149
جاري الاطلاع 

مشكور

 

ساعود بعد قليل
#150

خذ راحتك , فانا معك اقوم اﻻن ببرمجة مدونة في اطار bottle

 

اي شيء لم تفهمه في المكتبة قول وان شاء الله اجيبك عليه بكل سهولة

salah.jpg

مواضيع مشابهة