Using Django's New Form Engine

The Django web framework's new form engine (not yet released, but available from the project's Subversion repository: see the Django installation page) eliminates much of the pain in creating and updating data submitted by users.

As an example I've written a Django app using a design pattern that is likely to be familiar to those coming from a PHP background.

This simple example allows the creation, updating, and deletion of contacts.

Project Setup

Start a project named 'myproject' and, within the project, an application named 'contacts'.

$ django-admin.py startproject myproject
$ cd myproject
$ python manage.py startapp contacts
$ mkdir html

Edit your project's settings.py file and make the following changes:
  1. Configure your database (sqlite3 is convenient)
  2. Add 'myproject.contacts' to your INSTALLED_APPS list
  3. Add 'html' to your TEMPLATE_DIRS list

Edit the project's urls.py file and add the following url pattern: (r'^contacts/', 'myproject.contacts.views.main').

The Model

Edit the contacts/models.py file to contain the following code:

from django.db import models
 
# Create your models here.
class Contact(models.Model):
  name  = models.CharField(maxlength=200)
  phone = models.CharField(maxlength=200)

The View

Edit the contacts/views.py file to contain the following code:
from myproject.contacts.models import Contact
from django import newforms as forms
from django.shortcuts import render_to_response
 
def main(request):
 
  # initialize variables to sent to template
  message = ''
  submit_action = 'Add'
  edit_id = ''
 
  # generate default form
  ContactForm = forms.form_for_model(Contact)
  f = ContactForm()
 
  # handle edit and delete events
  if request.method == 'GET':
    if request.has_key('edit_id'):
      # replace default form with form based on row to edit
      contact = Contact.objects.get(pk=request.GET['edit_id'])
      ContactForm = forms.form_for_instance(contact)
      f = ContactForm()
      submit_action = 'Update'
      edit_id = request.GET['edit_id']
      message = 'Editing contact ID ' + request.GET['edit_id']
 
    if request.has_key('delete_id'):
      Contact.objects.get(pk=request.GET['delete_id']).delete()
      message = 'Contact deleted.'
 
  # handle add and update events
  if request.method == 'POST':
    if request.POST['submit_action'] == 'Add':
      # attempt to do add
      add_f = ContactForm(request.POST)
      if add_f.is_valid():
        add_f.save()
        message = 'Contact added.'
      else:
        # validation failed: show submitted values in form
        f = add_f
 
    if request.POST['submit_action'] == 'Update':
      # attempt to do update
      contact = Contact.objects.get(pk=request.POST['edit_id'])
      ContactForm = forms.form_for_instance(contact)
      update_f = ContactForm(request.POST.copy())
      if update_f.is_valid():
        update_f.save()
        message = 'Contact updated.'
      else:
        # validation failed: prepare form for new update attempt
        submit_action = 'Update'
        edit_id = request.POST['edit_id']
        f = update_f
 
  # get existing contacts
  contact_list = Contact.objects.all()
 
  # return rendered HTML page
  return render_to_response(
    'contacts.html',
    { 'request': request,
      'message': message,
      'contact_list': contact_list,
      'form': f.as_table(),
      'submit_action': submit_action,
      'edit_id': edit_id
    }
  )

The Template

Last, we have to define our Django template.

Create a file at html/contacts.html that contains the following code:
<html>
<head>
  <title>Contacts</title>
</head>
 
<body>
{% if message %}
  <b>{{ message }}</ b>
  <p />
{% endif %}
 
{% if contact_list %}
<table>
  {% for contact in contact_list %}
  <tr bgcolor='{% cycle FFFFFF,EEEEEE as rowcolor %}'>
    <td>{{ contact.name }}</td>
    <td><a href='{{ request.path }}?edit_id={{ contact.id }}'>Edit</a></td>
    <td><a href='{{ request.path }}?delete_id={{ contact.id }}'>Delete</a></td>
  </tr>
  {% endfor %}
</table>
<p />
{% endif %}
 
<form action='{{ request.path }}' method='POST'>
<input type='hidden' name='edit_id' value='{{ edit_id }}'>
<table>
{{ form }}
<tr>
  <td colspan=2 align=right>
    <input type=submit name='submit_action' value='{{ submit_action }}'>
  </td>
</tr>
</table>
</form>
 
{% ifnotequal submit_action 'Add' %}
  <p />
  <a href='{{ request.path }}'>Add New Contact</a>
{% endifnotequal %}
</html>
Note the use of request.path in the template: this is similar to the use of $_SERVER['PHP_SELF'] in PHP.

The End Result

Now that we've set up the project and defined a model, view, and template we synchronize the database and run the test server with the commands below:
$ python manage.py syncdb
$ python manage.py runserver
With any luck, the application should now be accessable via http://localhost:8000/contacts.

64 comments on Using Django's New Form Engine

  1. CD プレス (not verified)
    Wed, 2010-06-02 06:59

    CD,DVDをプレスするなら高品質で激安のCD プレス、YASUI PRESSで!

    フライヤー、ポスター、冊子、ステッカー…印刷なら「安い」「早い」印刷 激安のYOTSUBA印刷で!

    HipHop,R&B,Reggae,HouseのMIX CDならMIX CD 通販Monster Musicのページで!

    大阪でロープライス、ハイクオリティーなデリヘルをお探しなら大阪 デリヘルで!

    大阪でお仕事をお探しの方は大阪 高収入求人で!

    CMのBGM、WEB用のオリジナル楽曲の制作なら音楽制作で!

  2. 大阪 デリヘル (not verified)
    Wed, 2010-06-02 06:56

    新着ん。は大阪 デリヘル、大阪 ホテヘルなどのリアルタイム情報を掲載しています。
    大阪 デリヘルをご利用したいとお考えの方、大阪 デリヘルに興味をお持ちの方は是非こちらのサイトをご覧下さい。
    大阪 デリヘル、大阪 風俗。キャバクラ、ホスト等の高収入求人情報に興味のある方は大阪 高収入求人ワーカープラスへ!

    中古コピー機専門店アットコピーは、中古コピー機を「あっと」驚く価格。「あっと」いう間に全国配送致します!中古コピー機ならアットコピーへ!

    日本語ラップ好きによるBLOG。メディアで知ることの出来ないアーティストも多数紹介しています!
    大手流通では置いていない日本語ラップ 通販はこちら。

    漫画好きによる漫画 おすすめ マンガのBLOGです。歴史的名作からB級作品まで、様々な漫画を紹介します!

    誰が何と言おうとプロレスは最高です!プロレスLOVEな男によるBLOGです。

    崇高なる音楽ヘビーメタルを愛する人間によるBLOGです。

    日本人の精神を見失った人達へのメッセージ。愛国心を取り戻しましょう!

    名作「北斗の拳」から人生を学びましょう。

    CDやDVDを作りたい方、CD プレスBLOGを参考にして下さい。

    夜のお仕事高収入求人Mnavi・エムナビ,大阪・神戸・京都・滋賀・奈良・和歌山の高収入バイト情報。エムナビは業種やエリアで絞り込んで検索が行えます。

  3. Anonymous (not verified)
    Fri, 2010-04-02 23:51

    sikiş izle sikiş izle
    sikiş izle sikiş izle
    sikiş izle sikiş izle
    sikiş izle sikiş izle
    sikiş izle sikiş izle
    sikiş izle sikiş izle
    sikiş izle sikiş izle

    sikiş sikiş
    sikiş sikiş
    sikiş sikiş
    sikiş sikiş
    sikiş sikiş
    sikiş sikiş
    sikiş sikiş

    porno youporn
    porno youporn
    porno youporn
    porno youporn
    amcık amcık
    porno youporn

    porno izle porno izle
    porno izle porno izle
    porno izle porno izle
    porno izle porno izle
    porno izle porno izle
    porno izle porno izle
    porno izle porno izle

    Canlı maç izle canlı maç izle
    Canlı maç izle maç izle
    Canlı maç izle lig tv izle

    Canlı maç izle canlı maç izle
    Canlı maç izle canlı maç izle
    Canlı maç izle canlı maç izle
    Canlı maç izle canlı maç izle
    Canlı maç izle canlı maç izle
    Canlı maç izle canlı maç izle

  4. Anonymous (not verified)
    Fri, 2010-04-02 16:03
  5. Anonymous (not verified)
    Tue, 2010-03-16 07:24
  6. Anonymous (not verified)
    Thu, 2010-03-11 00:28
  7. porno (not verified)
    Sun, 2010-03-21 16:22
  • Anonymous (not verified)
    Thu, 2010-03-11 00:17

    شات الشله |
    شات |
    شات صوتي |
    دليل |
    العاب |
    توبيكات |
    منتديات |
    دردشة سيف العشق |
    دردشة بنات نجد |
    دردشات الخليج |
    دردشات سعوديه |
    شات صوتي |
    دردشات عربيه |
    دليل مواقع |
    كويت كام |
    بنت ابوي |
    روحانيات |
    جسر التواصل |
    ادبيات |
    شرفات الازاهير |
    دوائر ضوء |
    الترفيه |
    شبابيات |
    طيور الحب |
    منتدى |
    دردشة |
    شات كتابي |
    شات الرياض |
    دردشة الغلا |
    صيف كام |
    دردشة البرق |
    دردشة الرومنسية |
    دردشة تحب |
    شات صوتي بناتي |
    دردشة الشله |
    صور وتعليق |
    سحر العالم |
    شات صوتي بنات |
    منتدى |
    مملكة |
    الحياة الزوجية |
    دردشة ابو عريش |
    دردشة الوله الصوتي |
    دردشة شام |
    دردشة العنابي |
    دردشة مزنة |
    دردشة التحليه |
    دردشة عمان |
    سعودي ون |
    دردشه الحب |
    دردشه حائل |
    نت لوق |
    ايكريام |
    سعودي كول 6666 |
    سعودي كام |
    دردشه الواحات الاسلامية |
    بنت الرياض |
    دردشه نجران |
    دردشة العين |
    لحن |
    طرب توب |
    طربي |
    دردشه الخليج |
    رويتك |
    منتديات جدة بايكرز |
    العاب برق |
    دردشة ليبيانا |
    حرب القبائل |
    سعودي كول 19994 |
    دردشه صوتيه |
    دردشة كتابية |
    شات الود |
    دردشة صوتيه عراقيه |
    طرب |
    حلا السعوديه |
    تعب قلبي |
    منتديات فراشة حواء |
    دردشه وله عمري |
    منتديات عشاق الهلال |
    ماسنجريات |
    صور المشاهير |
    مشاهير العالم |
    الانمي |
    دردشة برق |
    جازان توب |
    ارجوان |

  • Anonymous (not verified)
    Mon, 2010-02-22 09:44

    価格比較,価格検索,比較購入-どけち.com,どけち.comは、PC・パソコン・電気製品・ファッション・カー用品・時計等、さまざまな商品やサービスの価格を比較する日本最大級の価格検索

  • Andy (not verified)
    Thu, 2010-02-18 15:45

    I love technical post like these because I can really learn something here rather than blindly surfing on the Web.
    Andy from woven shades

  • Andy (not verified)
    Thu, 2010-02-18 15:43

    I love technical post like these because I can really learn something here rather than blindly surfing on the Web.
    Andy from woven shades

  • Anonymous (not verified)
    Tue, 2010-02-09 03:11

    結婚引出物や、結婚?出産などの内祝いほか、さまざまなギフトシーンにご満足いただけるリンベルのカタログギフト。ハウジングスカイなら、いつでも東京都内すべての売買物件(土地?戸建?マンション?投資用物件)の仲介手数料が、無料もしくは 半額(法定上限比)にてお得に不動産がご購入?ご売却いただけます。仲介手数料無料にすることで、よりリーズナブルに新築の一戸建て住宅をご紹介いたします。人気のウォーター サーバーを口コミとランキングから徹底比較!賢い水の宅配業者と正しいウォーター サーバーの選び方を一からやさしくガイドします!横浜市旭区 不動産沿線都市の開発の進む注目の「JR横浜線」の3路線の沿線不動産特集をお送りします。コストダウンの味方「オプティマキッドの名刺 激安」は両面カラー?高級厚紙?名刺作成ラミネート防水加工のハイクオリティです。外出先などで、パソコン版と同様の情報量・検索性でネイルサロンを探せます。シャオウェイヤン(小尾羊)は全世界で700店以上を展開。世界中で愛される本格 薬膳蒙古火鍋しゃぶしゃぶ食べ放題 池袋の専門店です。3つの味(コラーゲン白湯・麻辣紅湯・ヘルシー山珍湯)が1つのコラーゲン鍋で楽しめます。私どもが製造?販売する「からだにうるおうアルカリイオン水」は数ある。OSBAYは、小?中規模のシステム設計?ソフト開発を得意としていますので、高品質、効率的、低コストのソフトウェア受託開発サービスをお客様にご提供できると自負しています。そんなお悩みをお持ちのデザイナー様や看板 製作業者様のニーズに当社が応えます!当社ではあらゆる特殊看板を製作いたしております。トイレ 詰まり(詰まり)?水漏れ、水道工事を 依頼して、他社に「すぐ行けない」、「それは出来ない」と断られた方、いつでも当社にご相談ください。船橋市 不動産なら京葉リネットにお任せを!船橋市 市川市 八千代市を中心に千葉県の不動産物件情報(新築一戸建て・中古住宅・土地・マンション)を掲載しています。

  • muhabbet (not verified)
    Wed, 2010-02-03 20:56

    thanks

  • sohbet (not verified)
    Wed, 2010-02-03 20:54
  • sohbet (not verified)
    Wed, 2010-02-03 20:53
  • Safak (not verified)
    Tue, 2010-02-02 23:20
  • bedava chat (not verified)
    Sat, 2010-02-13 01:18
  • Anonymous (not verified)
    Sat, 2010-01-30 05:52

    Thanks for the post. Keep the great work.

    Jack,
    buy laptop

  • Paul (not verified)
    Wed, 2010-03-24 14:59

    Very nice post, thanks for sharing...

    Snow Throwers

  • Matrak (not verified)
    Tue, 2010-01-26 01:48
  • Anonymous (not verified)
    Fri, 2010-01-15 07:26

    カタログギフトのリンベルでは、結婚引出物や結婚内祝い、出産内祝い、香典返ししなどの冠婚葬祭やお中元・お歳暮に最適な、贈られた方がお好みの商品を選べるカタログギフトをご用意しています。
    ******************************************************
    ペット 葬儀 川崎の移動火葬(出張火葬)対応のペット 葬儀 東京動物火葬/葬儀会社です。
    *************************************************
    ベネフィットライフなら首都圏の不動産仲介手数料0円が最大無料でお得。ハウジングスカイでは、東京都内すべての物件の仲介手数料無料必ず無料or半額(法定上限比)になります。
    **************************************************
    保土ヶ谷 不動産豊かな自然と利便性を両立した大島・不動産 葛飾区砂町を中心に江東区のレジャーと不動産をご紹介します。不動の人気エリア「東横線」。渋谷・川崎市 不動産横浜に直通のアクセスと整った横浜市戸塚区 不動産住環境が魅力の人気沿線です。人気の港北ニュータウンを通る「市営地下鉄線グリーンライン」「市営地下鉄線ブルーライン」、横浜市旭区 不動産沿線都市の開発の進む注目の「JR横浜線」の3路線の沿線不動産特集をお送りします。
    ******************************************************
    コストダウンの味方「オプティマキッドの名刺 激安」は両面カラー・高級厚紙・名刺作成ラミネート防水加工のハイクオリティです

  • Anonymous (not verified)
    Fri, 2010-01-15 02:49

    カタログギフトのリンベルでは、結婚引出物や結婚内祝い、出産内祝い、香典返ししなどの冠婚葬祭やお中元・お歳暮に最適な、贈られた方がお好みの商品を選べるカタログギフトをご用意しています。
    ******************************************************
    ペット 葬儀 川崎の移動火葬(出張火葬)対応のペット 葬儀 東京動物火葬/葬儀会社です。
    *************************************************
    ベネフィットライフなら首都圏の不動産仲介手数料0円が最大無料でお得。ハウジングスカイでは、東京都内すべての物件の仲介手数料無料必ず無料or半額(法定上限比)になります。
    **************************************************
    保土ヶ谷 不動産豊かな自然と利便性を両立した大島・不動産 葛飾区砂町を中心に江東区のレジャーと不動産をご紹介します。不動の人気エリア「東横線」。渋谷・川崎市 不動産横浜に直通のアクセスと整った横浜市戸塚区 不動産住環境が魅力の人気沿線です。人気の港北ニュータウンを通る「市営地下鉄線グリーンライン」「市営地下鉄線ブルーライン」、横浜市旭区 不動産沿線都市の開発の進む注目の「JR横浜線」の3路線の沿線不動産特集をお送りします。
    ******************************************************
    コストダウンの味方「オプティマキッドの名刺 激安」は両面カラー・高級厚紙・名刺作成ラミネート防水加工のハイクオリティです

  • Timberland for kids (not verified)
    Wed, 2010-01-13 13:27
  • authentic football jerseys (not verified)
    Wed, 2010-01-13 13:26
  • Timberland for kids (not verified)
    Wed, 2010-01-13 13:24
  • Manowar (not verified)
    Mon, 2010-01-11 00:58

    very nice place in your hand health. Be happy to see you more beautiful places,
    I suggest you have my site together I hope we will succeed in this business. Thanks again ...

    sohbet
    Chat
    sohbet
    mirc
    muhabbet
    Radyo
    islami sohbet
    Sohbet
    Forum
    Güzel Sözler
    Güzel Sözler
    video izle
    Endikasyon
    Film izle
    Hikaye
    sohbet
    Oyun
    okey oyna
    okey oyna
    okey oyna
    Dizi izle
    mirc
    chat

  • nokia 5310 (not verified)
    Tue, 2009-11-10 13:58

    I am looking for a project based application which will be embedded by several scripts, also looking for some java based applications for the new projects,nice post.

  • blueblueblue (not verified)
    Fri, 2009-11-06 09:54
  • blueblueblue (not verified)
    Mon, 2009-10-26 10:07
  • evden eve nakliyat (not verified)
    Mon, 2009-11-02 14:45
  • buy lipitor (not verified)
    Wed, 2009-10-14 19:47

    buy cheap lipitor
    buy lipitor online

  • tommy9696 (not verified)
    Mon, 2009-10-12 07:09

    This is a port of the Django tutorial to use appengine instead of Pure Django. Like in the Django tutorial, we build a poll engine, where you can create polls and others can vote for them. Instead of the four part Django tutorial, we use only one tutorial. Also, as many parts of Django, most prominently its super Admin interface do not work, we will work around them. I will assume that you know python well. However I do not assume that you have previous experience with Django. Django concepts are explained. 70-647 What will we build
    We will build a Poll engine, where people can create polls, and vote on the options. Essentially this has four types of pages,
    1. A listing of the recently created polls.
    2. A page where you can create new pages.
    3. A page with the choices, and for voting.
    4. A page with the results.
    A live install of this can be see on blogango.appspot.com The complete source for this can be downloaded from here
    Downloading Django, 70-236 and Appengine Downlaoding Django is very well documented, so I will not repeat it here. And you have already downloaded Appengine, right? Though downloading Django is a not required for this tutorial, as appengien has django 0.96 built in with it.
    Getting Help If you are having trouble with this tutorial, please ask in Django forum and some one from Django community would be able to help you , or leave a comment on 42topics.com blog, and I will try to help you.
    Creating a project Create a directory where you would like to keep all your Appengine and Django files. Inside of this directory, run the command: django-admin.py startproject appproject 642-825 This would create a directory called appproject which would contain files used by Django. We will look at these files in a moment, but before that we need to create two more files. Create a file called main.py at the same level as the folder appproject, and put this code.:
    mport os,sys
    os.environ['DJANGO_SETTINGS_MODULE'] = 'appproject.settings'

    # Google App Engine imports.
    from google.appengine.ext.webapp import util

    # Force Django to reload its settings.
    from django.conf import settings
    settings._target = None

    import django.core.handlers.wsgi
    import django.core.signals
    import django.db
    import django.dispatch.dispatcher

    # Log errors.
    #django.dispatch.dispatcher.connect(
    # log_exception, django.core.signals.got_request_exception)

    # Unregister the rollback event handler.
    django.dispatch.dispatcher.disconnect(
    django.db._rollback_on_exception,
    django.core.signals.got_request_exception)

    def main():
    # Create a Django application for WSGI.
    application = django.core.handlers.wsgi.WSGIHandler()

    # Run the WSGI CGI handler with that application.
    util.run_wsgi_app(application)

    if __name__ == '__main__':
    main()

  • John (not verified)
    Fri, 2007-09-14 00:27

    I tried displaying the the form using MYSQL. The page didn't render properly.
    Any ideas on getting your example to work with MYSQL?

  • Anonymous (not verified)
    Wed, 2009-10-21 12:50

    Thanks a lot.Sohbetgood outros saves..Sohbetticked is will felanSohbetmichael phelpschatis rockman dir kendisi.muhabbettihis id great info thanks a lot:) for share.sohbet felan bide aq:)kızlarla sohbetgiving you acces yeterEmlak
    god. you tatally..Web Tasarımable to fin felanturkish chatgreat ammount off diffrent.cinsel sohbetingilish söktü ben sohbetfelan. music musicalmynetthanks.. veçetve Thanks a Lot.!

  • Anonymous (not verified)
    Fri, 2010-06-11 19:37

    insanlar sevdiklerini dinlemek için bazen değişik yollar kullanır bunlardan birisi ise
    telefon dinleme programı olarak tabir ettiğimiz interceptor
    yazılımlarıdır. bunlarla gizli telefon dinleme yapabilirsiniz.

  • Mike
    Mon, 2007-10-08 19:50

    Hi John,

    I did use MySQL so it should work.

  • David (not verified)
    Thu, 2007-04-26 13:21

    Unfortunately the example can not be developed further - it needs to be unraveled and reconstructed before it is a useful prototype. This example has "Delete" instructions coming in on a GET. GETs should be side-effect free.

    David

  • Mike
    Sat, 2007-04-28 04:12

    Hi David,

    Good point... I should retool that part of the tutorial. Thanks for the feedback!

  • david (not verified)
    Thu, 2007-04-26 13:15

    This tutorial rocks.

    Try adding a new field to the database

    email varchar 75

    And the following line to model.py

    email = models.EmailField()

    Then load the page at http://127.0.0.1:8000/contacts/ again!

    It just works.

    Try entering an email of "abc" and watch the automatic validation!

    Thanks Mike!

  • Anonymous
    Sat, 2007-03-03 12:48

    I solved my problem - the urls.py file is not able to generate a decent error on a url that is not written in parenthesis.

    I did
    r'^contacts/', 'myproject.contacts.views.main'.

    instead of:

    (r'^contacts/', 'myproject.contacts.views.main').

    Code 18
    works fine now.

    This is going to be helpful.

    Do you have any idea how you would retrieve fields from a database and map it into a CSS form?

    Kind of for: (string1,string2,string_n); ask string.color

    and it would retrieve the strings from a table.

    f.

  • Mike (not verified)
    Sat, 2007-03-10 07:26

    Hi Francois,

    For the CSS thing do you mean passing an entire row into a template then using a field from the row to specify CSS properties?

    I'm not sure how to offhand, but my guess is it wouldn't be too tricky. When I get some time hopefully I can take a gander at that problem.

    Cheers and thanks for stopping by!

    Mike

  • mikroenjeksiyon (not verified)
    Wed, 2010-07-28 15:07

    I am looking for a project based application which will be embedded by several scripts, also looking for some java based applications for the new projects,nice post.was an article I liked. Thanks for sharing.
    tüp bebek

  • Anonymous
    Sat, 2007-03-03 12:30

    I do not understand what is happening, but it seems to complain on the notion of a URL bound to request.path
    -=Francois=-

    Request Method: GET
    Request URL: http://www.server.net:8000/
    Exception Type: TypeError
    Exception Value: __init__() takes at most 4 arguments (11 given)
    Exception Location: /usr/lib/python2.4/site-packages/django/conf/urls/defaults.py in patterns, line 18

    Traceback (innermost last)
    Switch to copy-and-paste view

    /usr/lib/python2.4/site-packages/django/core/handlers/base.py in get_response
    return response # Get urlconf from request object, if available.

  • Anonymous
    Wed, 2007-02-28 16:45

    Thanks for the complete example - looks good! I will check it out and see if this works. Do you need any additional patches?

  • 3d oyunlar (not verified)
    Mon, 2010-01-18 12:13

    thanks admin
    information is the most beautiful treasures

  • Mike (not verified)
    Sat, 2007-03-10 07:21

    You shouldn't need any additional patches, but you need the latest version of Django from Subversion (not the latest release version).

  • Anonymous (not verified)
    Sat, 2009-10-17 09:42

    http://guvercin-forum2009.yetkinforum.com

  • Anonymous
    Mon, 2007-02-26 02:10

    Thanks, Mike! I found that very helpful. I came across your link in the comments to the Newforms documentation, so it's a good thing you put it there :-)

    Do you only have anonymous comments? I can't see where to put my name in. I'm evariste.

  • Estetik Doktoru (not verified)
    Thu, 2010-01-14 15:33

    think the same things ...:)))

  • mikroenjeksiyon (not verified)
    Wed, 2010-07-28 15:05

    I am looking for a project based application which will be embedded by several scripts, also looking for some java based applications for the new projects,nice post.