Django學習筆記—驗證碼

鴨脖發表於2012-05-06

大部分部落格網站是不會設定使用者登入功能的,如果表單上再不新增驗證碼機制,那你就等著spammer瘋狂的攻擊吧。我曾經就吃過大虧:之前的一個網站平均每天幾十條垃圾留言,刪都來不及。後來在網上找到了一個優秀的遮蔽spam的外掛——akismet,使用後果然效果不錯,基本上垃圾資訊都被遮蔽掉了,即在前臺是看不到了,但問題是這些垃圾評論還是在源源不斷地寫入你的資料庫表中,在管理後臺裡還是能看到它們的存在的。故為了眼不見心不煩,一勞永逸,還是決定給網站增加驗證碼機制,雖然以後提交表單繁瑣了點,但網站總算落了個清淨。

使用python或者說django的好處是什麼?就是當你想實現某個功能時候,先去網上搜搜看,很多時候你會發現已經有人解決了這個問題,釋出了相關的庫。你拿來直接使用就OK了。搜尋“django、驗證碼”,django-simple-captcha出現了,看了一下它的介紹,發現真的是一款相當好用的django第三方驗證碼庫,隨即就用在了我的這個部落格網站上。下面把它的用法簡單記錄一下。

一、簡介

  1. 專案地址:http://code.google.com/p/django-simple-captcha/
  2. 簡介:是一個第三方django APP,用於為表單新增驗證碼圖片

二、一般的使用方法

  1. 下載後python setup.py install進行安裝
  2. 將下載包解壓,將裡面的captcha包複製到專案目錄下,如myblog/captcha
  3. settings.py裡新增:
    1
    INSTALLED_APPS(‘captcha’,)
  4. urls.py裡新增:
    1
    (r’^captcha/’, include(‘captcha.urls’)),
  5. 執行python manage.py syncdb生成所需資料庫表
  6. 在需要用到captcha的forms.py檔案裡的合適位置新增下面的程式碼,增加驗證碼欄位:
    1
    2
    3
    from captcha.fields import CaptchaField
     
    captcha=CaptchaField()
  7. 在處理表單提交的業務邏輯程式碼塊裡新增:
    1
    2
    if form.is_valid():
        human = True

三、與django的comments元件結合使用的方法

如果你的專案裡的評論系統直接使用的django內建的comments庫,則comments庫與此驗證碼庫結合使用的方法如下:

  1. 執行前面的1至5步
  2. 在 Python27\Lib\site-packages\django\contrib\comments\forms.py檔案中(windows環境下的路徑),在CommentDetailsForm類裡面新增驗證碼欄位:
    1
    2
    3
    from captcha.fields import CaptchaField
     
    captcha= CaptchaField()
  3. 在Python27\Lib\site-packages\django\contrib\comments\views\comments.py檔案中,在# Otherwise create the comment這句下面新增:
    1
    human=True
  4. 修改表單模板:如果評論表單模板直接用的{{form}}則什麼都不用修改;如果是自己定製的表單模板,則可新增如下:
    1
    2
    3
    <p>
    <label for="id_captcha">驗證(必填):</label> {{form.captcha}}
    </p>

這樣就基本能夠使用了,擷取了一張效果圖,大家來看看:

文章來源:http://newliu.com/post/5/


相關文章