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

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

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

'ممكن رابط المستودع ﻻخر تحديث للمشروع لكي انزله

salah.jpg

#78
تم تحديث القوالب
كما تم اصلاح الخطأ الكامن في القالب base.html
حيث قمت باظافة الـ / في السطرين :
<link href="public/css/bootstrap.min.css" rel="stylesheet" media="screen">
            <link href="public/css/site.css" rel="stylesheet" media="screen">
كما يلي:
<link href="/public/css/bootstrap.min.css" rel="stylesheet" media="screen">
            <link href="/public/css/site.css" rel="stylesheet" media="screen">
 
بحيث كان يمنع تشغيل الملفات الساكنة داخل القالب results.html

 

 

 كما تم اضافة التصريح <!DOCTYPE> الى القالب الرئيسي base.html لكي يصبح فعليا HTML5 وهو ما يتوافق مع twitter bootstrap

التعديلات موجودة في الملف المرفق

تم تعديل هذه المشاركة بواسطة med reda في 5 مايو 2013 في 01:58

#79

لم استطع ارفاق المشروع

#80

تمام

تم اضافة اﻷصلاحات + تم تعديل ملف base.html ليظهر السايد بار في مكانه

#81

السلام عليكم ، كثير من التحسينات والمراجعات

https://bitbucket.org/xmonader/xmon-crazypaste/commits/all

إصلاح raw

إضافة download

مراجعة PasteForm

تعديل إسم DBMODEL إلى paste

إصلاح روابط صفحات contact/about وإضافة template آخر

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#82

الله ينور 

دالة  new تحتاج إلي تمرير المتغير   paste=newPaste 

 

كده خلاص ولا إيه ؟؟

#83

في دالة new يوجد مشكلة كبيرة ، أنك لاتقوم بتفعيل ال validations !

المفترض يكون الكود مشابه لهذا 

 

 

 
 
@route('/new', method="POST")
def new():
    form=PasteForm(request.POST)
    if form.validate():
        title=form.title.data
        language=form.language.data
        author=form.author.data
        code=form.code.data
      ....
      #create new paste
      ....
        #redirect to show/id
        redirect('view/%d'%p.id)
    else:
        return template('templates/new.html', locals())

 

بالإضافة أرى أن يتم التحويل ل view بدلا من "رندرة"  ملف results مرة اخرى

 

 

*مع مراعاة تعديل ال template الذي يعرض ال form لإمكانية عرض الأخطاء التي سيتم تخزينها في متغيرات ال error في عناصر ال form

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 5 مايو 2013 في 17:46

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#84

تحسينات جميلة ماشاء الله , اعذروني لقلة مشاركتي بسبب امتحاناتي !!

 

 

 

لدي سؤال لمن قام بكتابة هذا الكود ؟

 

 

def download(n):

    f=tempfile.NamedTemporaryFile(delete=False)
    fname=f.name
    #print "F: ", f
    #print "fname: ", fname
    #print "fdir: ", dirname(fname)
    s=Session()
    paste=s.query(Paste).filter(Paste.id==n).first()
    f.write(paste.code)
    f.close()
    ret=static_file(basename(fname), root=dirname(fname), download=fname, mimetype="text")
    os.unlink(fname)
    return ret

هذا الجزء من الكود

    f=tempfile.NamedTemporaryFile(delete=False)

 

ماوضيفته ومع اي مكتبة هو



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

تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 5 مايو 2013 في 18:46

salah.jpg

#85

http://docs.python.org/2/library/tempfile.html

 

delete=False تمنع حذف الملف بعد إغلاقه مباشرة ويجب عليك أنت أن تقوم بذلك يدويا

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#86

معلومة قيمة وجديدة و, جزاك الله خيرا على هذه المعلومة !!

 

,

salah.jpg

#87

اريد ان اعمل له عارض اخطاء عند ترك احد الحقول فارغة ﻻكن المشكلة  ﻻ يضهر القالب

 

error = ['please insert Info author','Please insert info title','please insert code Script']

a = PasteForm()
if a.codeauthor == '':
	return template('templates/home.html',error=error[0])
if a.codetitle == '':
		return template('templates/home.html',error=error[1])
if codebody == '':
		return template('templates/home.html',error=error[2])

 

ووضعت قي القالب اللوان وغيرها

 

ﻻكن ﻻ يضهر الخطا عند تركه فارغ

 

اليس هذه الدالة هي المسؤلة عن الحقول

salah.jpg

#88

ماهذا الذي تكتبه!؟

 

أنظر إلى هذه المشاركة جيدا

 

/index.php/topic/277604-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%AC%D9%85%D8%A7%D8%B9%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-bottlepaste/page-5#entry1339104

 

 

يجب أن تستدعي validate ليتم التحقق من ال form وإذا يوجد أخطاء سيسجل الخطأ 

وفي داخل ال template قم بإضافة هذه الجزئية بجوار الfield

 

 
                            {% if field.errors %}
                                <span class="error help-inline">{{",".join(field.errors)}}</div>
                            {% endif %}
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#89

انت لم تفهم قصدي .,

 

قصدي هو عندما يترك المستخدم احد الحقول فارغا , تخرج له رسالة ترغمه على ملأه !!

salah.jpg

#90
MuStafa - HaSsan كتب:

انت لم تفهم قصدي .,

 

قصدي هو عندما يترك المستخدم احد الحقول فارغا , تخرج له رسالة ترغمه على ملأه !!

 

:)

 

ال form المبنية على WTForm تدعم عملية التحقق من المدخلات إذا استوفت الشروط أو ﻷ، 

 

لماذا وضعنا validator هنا ب Required من الأساس ؟

 
class PasteForm(Form):
    title = TextField()
    language=SelectField('Language', choices=languages_list)
    author = TextField()
    code = TextAreaField(validators=[validators.required()])

ال validators تتحقق من أشياء انت تحددها ، على سبيل المثال أن هذا الحقل مطلوب أو أن يكون رقما أو أن يكون على نمط URL او Email 

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#91

جميل , سوف اعمل عليها , واشكرك على توضيحها لي !!

salah.jpg

#92

مبدأيا 

 

@route('/new', method="POST")
def new():
	frm = PasteForm(request.POST)
	if frm.validate():
		print "Form is valid"
		newPaste = DBMODEL(title=frm.codetitle.data,author=frm.codeauthor.data,\
				language=frm.language.data,code=frm.codebody.data,publishdate=datetime.datetime.now())
		s=Session()
		s.add(newPaste)
		s.commit()
		redirect('view/%d'%newPaste.id)	
	else:
		redirect('/')
#93
  else: redirect('/')

لا، الصحيح أن تقوم بإعادة ال template الذي يظهر فيه ال form وتمرر إليه المتغير form الذي سيحوي الerrors 

أنظر هنا

/index.php/topic/277604-%D9%85%D8%B4%D8%B1%D9%88%D8%B9-%D8%AC%D9%85%D8%A7%D8%B9%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-bottlepaste/page-5#entry1339104

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#94

انا فعلت مثل ماقلت وعلى التمبلت الذي يعرض الفورم

 

شاهد الكود كيف صار

هذا التمبلت

 

{% extends 'base.html' %}

{% block content %}

<style type = 'text/css'>
.errors{
	background-color: #f2dede;
	border-color: #eed3d7;
	}
		
		
 </style>
<hr>
<h1>BottlePaste</h1>
<hr>

<form class="form-horizontal" action="/new" method="post">
<legend>New Paste : </legend>
    <div>{{ form.codeauthor.label }} {{ form.codeauthor() }}</div>
    <div>{{ form.codetitle.label }} {{ form.codetitle() }}</div>
    
    <div>{{form.language.label}} {{form.language()}}</div>
    
    <div>{{form.codebody.label}} {{form.codebody(cols='90', rows='10')|safe}} </div>
    <div class="control-group">
         <div class="controls">
              <button type="submit" class="btn">Paste it</button>
         </div>
    
    
        	
 {% if field.errors %}
		<span class="errors">{{",".join(field.errors)}}</div>
 {% endif %}
</div>
</form>



</form>
{%endblock%}
{%block sidebar%}
     <h3>Last pastes</h3>
    <hr />
    <ul>
		{% for p in last5 %}
			<li class="paste-link"><a href="/view/{{p.id}}">{{p.title or 'UNTITLED'}}</a></li>
        {% endfor %}
    </ul>
    
{%endblock%}
@route('/new', method="POST")

def new():
	frm = PasteForm(request.POST)
	if frm.validate():
		errors = ["Form is valid"]
		newPaste = DBMODEL(title=frm.codetitle.data,author=frm.codeauthor.data,\
				language=frm.language.data,code=frm.codebody.data,publishdate=datetime.datetime.now())
		s=Session()
		s.add(newPaste)
		s.commit()
		redirect('view/%d'%newPaste.id)	
	else:
		return template('templates/home.html',errors=errors,form=frm,code=code)

 

 

ﻻكن يخرج خطأ

 

يقولي

 

onment.py", line 372, in getattr
    return getattr(obj, attribute)
UndefinedError: 'field' is undefined
127.0.0.1 - - [06/May/2013 11:57:21] "GET / HTTP/1.1" 500 741

salah.jpg

#95

الخطأ لكون لايوجد متغير مسمى ب field ، عندما قمت أنا بإنشاء الواجهة قمت بعمل loop

 

for field in form

اما في حالتك

ستفعل شئ مشابه للتالي

 

 

 {% if form.codebody.errors %} <span class="errors">{{",".join(form.codebody.errors)}}</div> {% endif %}
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#96

عندما اعدل واضع هذا الكود الذي كتبته انت , هل يحتاج ان اعدل في الكود الخاص بالسكربت

 

ام فقط في القالب

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

salah.jpg

#97

في قالب base  انت استخدمت    {% if field.errors %}    

في حين أنك عند استدعاء القالب مررت ثلاث متغيرات  code,error,form   وليس من بينها  field 

#98

الهمة ياشباب! دي جزئية بسيطة جدا

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#99
السلام عليكم 

تم تعديل الكود على السريع 


لقد استعنت بخصائص القواميس لاظهار الاخطاء

المشروع كامل معدل داخل الملفات المرفقة


اذا اردتم تحسين القوالب بشكل كامل ساقوم بذلك

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

#100

ارى انا تاخرنا في المشروع كثيرا , وانا اعتذر امتحانتي وها يوم الاحد بعد هذا الاحد تبدأ الامتحانات النهائية لن اتمكن من المشاركة في المشروع ارجو من الله جل جلاله التوفيق لكم

دعواتكم لي ولجميع الطلبة

salah.jpg

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…