欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單解析Django框架中的表單驗(yàn)證

 更新時間:2015年07月17日 17:43:24   投稿:goldensun  
這篇文章主要介紹了簡單解析Django框架中的表單驗(yàn)證,Django是Python重多人氣框架中最為著名的一個,需要的朋友可以參考下

我們的搜索示例仍然相當(dāng)?shù)睾唵危貏e從數(shù)據(jù)驗(yàn)證方面來講;我們僅僅只驗(yàn)證搜索關(guān)鍵值是否為空。 然后許多HTML表單包含著比檢測值是否為空更為復(fù)雜的驗(yàn)證。 我們都有在網(wǎng)站上見過類似以下的錯誤提示信息:

  •     請輸入一個有效的email地址, foo' 并不是一個有效的e-mail地址。
  •     請輸入5位數(shù)的U.S 郵政編碼, 123并非是一個有效的郵政編碼。
  •     請輸入YYYY-MM-DD格式的日期。
  •     請輸入8位數(shù)以上并至少包含一個數(shù)字的密碼。

關(guān)于JavaScript驗(yàn)證

可以使用Javascript在客戶端瀏覽器里對數(shù)據(jù)進(jìn)行驗(yàn)證,這些知識已超出本書范圍。 要注意: 即使在客戶端已經(jīng)做了驗(yàn)證,但是服務(wù)器端仍必須再驗(yàn)證一次。 因?yàn)橛行┯脩魰avaScript關(guān)閉掉,并且還有一些懷有惡意的用戶會嘗試提交非法的數(shù)據(jù)來探測是否有可以攻擊的機(jī)會。

除了在服務(wù)器端對用戶提交的數(shù)據(jù)進(jìn)行驗(yàn)證(例如在視圖里驗(yàn)證),我們沒有其他辦法。 JavaScript驗(yàn)證可以看作是額外的功能,但不能作為唯一的驗(yàn)證功能。

我們來調(diào)整一下search()視圖,讓她能夠驗(yàn)證搜索關(guān)鍵詞是否小于或等于20個字符。 (為來讓例子更為顯著,我們假設(shè)如果關(guān)鍵詞超過20個字符將導(dǎo)致查詢十分緩慢)。那么該如何實(shí)現(xiàn)呢? 最簡單的方式就是將邏輯處理直接嵌入到視圖里,就像這樣:

def search(request):
  error = False
  if 'q' in request.GET:
    q = request.GET['q']
    if not q:
      error = True
    **elif len(q) > 20:**
      **error = True**
    else:
      books = Book.objects.filter(title__icontains=q)
      return render_to_response('search_results.html',
        {'books': books, 'query': q})
  return render_to_response('search_form.html',
    {'error': error})

現(xiàn)在,如果嘗試著提交一個超過20個字符的搜索關(guān)鍵詞,系統(tǒng)不會執(zhí)行搜索操作,而是顯示一條錯誤提示信息。 但是,search_form.html里的這條提示信息是:”Please submit a search term.”,這顯然是錯誤的, 所以我們需要更精確的提示信息:

<html>
<head>
  <title>Search</title>
</head>
<body>
  {% if error %}
    <p style="color: red;">Please submit a search term 20 characters or shorter.</p>
  {% endif %}
  <form action="/search/" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search">
  </form>
</body>
</html>

但像這樣修改之后仍有一些問題。 我們包含萬象的提示信息很容易使人產(chǎn)生困惑: 提交一個空表單怎么會出現(xiàn)一個關(guān)于20個字符限制的提示? 所以,提示信息必須是詳細(xì)的,明確的,不會產(chǎn)生疑議。

問題的實(shí)質(zhì)在于我們只使用來一個布爾類型的變量來檢測是否出錯,而不是使用一個列表來記錄相應(yīng)的錯誤信息。 我們需要做如下的調(diào)整:

def search(request):
  **errors = []**
  if 'q' in request.GET:
    q = request.GET['q']
    if not q:
      **errors.append('Enter a search term.')**
    elif len(q) > 20:
      **errors.append('Please enter at most 20 characters.')**
    else:
      books = Book.objects.filter(title__icontains=q)
      return render_to_response('search_results.html',
        {'books': books, 'query': q})
  return render_to_response('search_form.html',
    {**'errors': errors** })

接著,我們要修改一下search_form.html模板,現(xiàn)在需要顯示一個errors列表而不是一個布爾判斷。

<html>
<head>
  <title>Search</title>
</head>
<body>
  **{% if errors %}**
    **<ul>**
      **{% for error in errors %}**
      **<li>{{ error }}</li>**
      **{% endfor %}**
    **</ul>**
  **{% endif %}**
  <form action="/search/" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search">
  </form>
</body>
</html>

相關(guān)文章

  • 如何使用pandas對超大csv文件進(jìn)行快速拆分詳解

    如何使用pandas對超大csv文件進(jìn)行快速拆分詳解

    Pandas是Python語言的一個擴(kuò)展程序庫,提供高性能、易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,下面這篇文章主要給大家介紹了關(guān)于如何使用pandas對超大csv文件進(jìn)行快速拆分的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 關(guān)于Python Error標(biāo)準(zhǔn)異常的總結(jié)

    關(guān)于Python Error標(biāo)準(zhǔn)異常的總結(jié)

    這篇文章主要介紹了關(guān)于Python Error標(biāo)準(zhǔn)異常的總結(jié),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python 排列組合之itertools

    python 排列組合之itertools

    python 排列組合之itertools,需要的朋友可以參考一下
    2013-03-03
  • Python?迭代器Iterator詳情

    Python?迭代器Iterator詳情

    這篇文章主要介紹了Python?迭代器Iterator詳情,迭代器可以幫助我們解決面對復(fù)雜的數(shù)據(jù)場景時,快速簡便的獲取數(shù)據(jù),下文關(guān)于其詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Python實(shí)現(xiàn)笑臉檢測+人臉口罩檢測功能

    Python實(shí)現(xiàn)笑臉檢測+人臉口罩檢測功能

    這篇文章主要介紹了Python實(shí)現(xiàn)笑臉檢測+人臉口罩檢測,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Django 拆分model和view的實(shí)現(xiàn)方法

    Django 拆分model和view的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇Django 拆分model和view的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python csv實(shí)時一條一條插入且表頭不重復(fù)問題

    python csv實(shí)時一條一條插入且表頭不重復(fù)問題

    這篇文章主要介紹了python csv實(shí)時一條一條插入且表頭不重復(fù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 基于numpy實(shí)現(xiàn)邏輯回歸

    基于numpy實(shí)現(xiàn)邏輯回歸

    這篇文章主要為大家詳細(xì)介紹了基于numpy實(shí)現(xiàn)邏輯回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Python繪制二維曲線的日常應(yīng)用詳解

    Python繪制二維曲線的日常應(yīng)用詳解

    今天小編就為大家分享一篇Python繪制二維曲線的日常應(yīng)用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python命令行運(yùn)行報(bào)錯ModuleNotFoundError:No module named‘XXX‘找不到自定義模塊

    python命令行運(yùn)行報(bào)錯ModuleNotFoundError:No module named‘X

    這篇文章主要介紹了python命令行運(yùn)行報(bào)錯ModuleNotFoundError:No module named‘XXX‘找不到自定義模塊問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論