مشروع جماعي : تطبيق BottlePaste
كما تم اضافة التصريح <!DOCTYPE> الى القالب الرئيسي base.html لكي يصبح فعليا HTML5 وهو ما يتوافق مع twitter bootstrap
التعديلات موجودة في الملف المرفق
تم تعديل هذه المشاركة بواسطة med reda في 5 مايو 2013 في 01:58
لم استطع ارفاق المشروع
السلام عليكم ، كثير من التحسينات والمراجعات
https://bitbucket.org/xmonader/xmon-crazypaste/commits/all
إصلاح raw
إضافة download
مراجعة PasteForm
تعديل إسم DBMODEL إلى paste
إصلاح روابط صفحات contact/about وإضافة template آخر
(map share people)
فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader
في دالة 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
تحسينات جميلة ماشاء الله , اعذروني لقلة مشاركتي بسبب امتحاناتي !!
لدي سؤال لمن قام بكتابة هذا الكود ؟
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

http://docs.python.org/2/library/tempfile.html
delete=False تمنع حذف الملف بعد إغلاقه مباشرة ويجب عليك أنت أن تقوم بذلك يدويا
(map share people)
فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader
اريد ان اعمل له عارض اخطاء عند ترك احد الحقول فارغة ﻻكن المشكلة ﻻ يضهر القالب
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])
ووضعت قي القالب اللوان وغيرها
ﻻكن ﻻ يضهر الخطا عند تركه فارغ
اليس هذه الدالة هي المسؤلة عن الحقول

ماهذا الذي تكتبه!؟
أنظر إلى هذه المشاركة جيدا
يجب أن تستدعي validate ليتم التحقق من ال form وإذا يوجد أخطاء سيسجل الخطأ
وفي داخل ال template قم بإضافة هذه الجزئية بجوار الfield
{% if field.errors %}
<span class="error help-inline">{{",".join(field.errors)}}</div>
{% endif %}(map share people)
فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader
انت لم تفهم قصدي .,
قصدي هو عندما يترك المستخدم احد الحقول فارغا , تخرج له رسالة ترغمه على ملأه !!

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
مبدأيا
@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('/') else: redirect('/')لا، الصحيح أن تقوم بإعادة ال template الذي يظهر فيه ال form وتمرر إليه المتغير form الذي سيحوي الerrors
أنظر هنا
(map share people)
فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader
انا فعلت مثل ماقلت وعلى التمبلت الذي يعرض الفورم
شاهد الكود كيف صار
هذا التمبلت
{% 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
الخطأ لكون لايوجد متغير مسمى ب 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
عندما اعدل واضع هذا الكود الذي كتبته انت , هل يحتاج ان اعدل في الكود الخاص بالسكربت
ام فقط في القالب
تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 6 مايو 2013 في 23:05

في قالب base انت استخدمت {% if field.errors %}
في حين أنك عند استدعاء القالب مررت ثلاث متغيرات code,error,form وليس من بينها field
الهمة ياشباب! دي جزئية بسيطة جدا
(map share people)
فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader
تم تعديل هذه المشاركة بواسطة med reda في 7 مايو 2013 في 17:47
ارى انا تاخرنا في المشروع كثيرا , وانا اعتذر امتحانتي وها يوم الاحد بعد هذا الاحد تبدأ الامتحانات النهائية لن اتمكن من المشاركة في المشروع ارجو من الله جل جلاله التوفيق لكم
دعواتكم لي ولجميع الطلبة
