最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python的Django框架中的表單處理示例

 更新時間:2015年07月17日 15:47:20   投稿:goldensun  
這篇文章主要介紹了Python的Django框架中的表單處理示例,表單處理是Django中的基礎(chǔ)操作,需要的朋友可以參考下

組建一個關(guān)于書籍、作者、出版社的例子:

from django.db import models

class Publisher(models.Model):
  name = models.CharField(max_length=30)
  address = models.CharField(max_length=50)
  city = models.CharField(max_length=60)
  state_province = models.CharField(max_length=30)
  country = models.CharField(max_length=50)
  website = models.URLField()

class Author(models.Model):
  first_name = models.CharField(max_length=30)
  last_name = models.CharField(max_length=40)
  email = models.EmailField()

class Book(models.Model):
  title = models.CharField(max_length=100)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher)
  publication_date = models.DateField()

我們現(xiàn)在來創(chuàng)建一個簡單的view函數(shù)以便讓用戶可以通過書名從數(shù)據(jù)庫中查找書籍。
通常,表單開發(fā)分為兩個部分: 前端HTML頁面用戶接口和后臺view函數(shù)對所提交數(shù)據(jù)的處理過程。 第一部分很簡單;現(xiàn)在我們來建立個view來顯示一個搜索表單:

from django.shortcuts import render_to_response

def search_form(request):
  return render_to_response('search_form.html')

這個view函數(shù)可以放到Python的搜索路徑的任何位置。 為了便于討論,咱們將它放在 books/views.py 里。

這個 search_form.html 模板,可能看起來是這樣的:

<html>
<head>
  <title>Search</title>
</head>
<body>
  <form action="/search/" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search">
  </form>
</body>
</html>

而 urls.py 中的 URLpattern 可能是這樣的:

from mysite.books import views

urlpatterns = patterns('',
  # ...
  (r'^search-form/$', views.search_form),
  # ...
)

(注意,我們直接將views模塊import進來了,而不是用類似 from mysite.views import search_form 這樣的語句,因為前者看起來更簡潔。)

現(xiàn)在,如果你運行 runserver 命令,然后訪問http://127.0.0.1:8000/search-form/,你會看到搜索界面。 非常簡單。

不過,當(dāng)你通過這個form提交數(shù)據(jù)時,你會得到一個Django 404錯誤。 這個Form指向的URL /search/ 還沒有被實現(xiàn)。 讓我們添加第二個視圖函數(shù)并設(shè)置URL:

# urls.py

urlpatterns = patterns('',
  # ...
  (r'^search-form/$', views.search_form),
  (r'^search/$', views.search),
  # ...
)

# views.py

def search(request):
  if 'q' in request.GET:
    message = 'You searched for: %r' % request.GET['q']
  else:
    message = 'You submitted an empty form.'
  return HttpResponse(message)

暫時先只顯示用戶搜索的字詞,以確定搜索數(shù)據(jù)被正確地提交給了Django,這樣你就會知道搜索數(shù)據(jù)是如何在這個系統(tǒng)中傳遞的。 簡而言之:

    在HTML里我們定義了一個變量q。當(dāng)提交表單時,變量q的值通過GET(method=”get”)附加在URL /search/上。

    處理/search/(search())的視圖通過request.GET來獲取q的值。

需要注意的是在這里明確地判斷q是否包含在request.GET中。就像上面request.META小節(jié)里面提到,對于用戶提交過來的數(shù)據(jù),甚至是正確的數(shù)據(jù),都需要進行過濾。 在這里若沒有進行檢測,那么用戶提交一個空的表單將引發(fā)KeyError異常:

# BAD!
def bad_search(request):
  # The following line will raise KeyError if 'q' hasn't
  # been submitted!
  message = 'You searched for: %r' % request.GET['q']
  return HttpResponse(message)

查詢字符串參數(shù)

因為使用GET方法的數(shù)據(jù)是通過查詢字符串的方式傳遞的(例如/search/?q=django),所以我們可以使用requet.GET來獲取這些數(shù)據(jù)。我們知道在視圖里可以使用request.GET來獲取傳統(tǒng)URL里的查詢字符串(例如hours=3)。

獲取使用POST方法的數(shù)據(jù)與GET的相似,只是使用request.POST代替了request.GET。那么,POST與GET之間有什么不同?當(dāng)我們提交表單僅僅需要獲取數(shù)據(jù)時就可以用GET; 而當(dāng)我們提交表單時需要更改服務(wù)器數(shù)據(jù)的狀態(tài),或者說發(fā)送e-mail,或者其他不僅僅是獲取并顯示數(shù)據(jù)的時候就使用POST。 在這個搜索書籍的例子里,我們使用GET,因為這個查詢不會更改服務(wù)器數(shù)據(jù)的狀態(tài)。 (如果你有興趣了解更多關(guān)于GET和POST的知識,可以參見http://www.w3.org/2001/tag/doc/whenToUseGet.html。)

既然已經(jīng)確認(rèn)用戶所提交的數(shù)據(jù)是有效的,那么接下來就可以從數(shù)據(jù)庫中查詢這個有效的數(shù)據(jù)(同樣,在views.py里操作):

from django.http import HttpResponse
from django.shortcuts import render_to_response
from mysite.books.models import Book

def search(request):
  if 'q' in request.GET and request.GET['q']:
    q = request.GET['q']
    books = Book.objects.filter(title__icontains=q)
    return render_to_response('search_results.html',
      {'books': books, 'query': q})
  else:
    return HttpResponse('Please submit a search term.')

讓我們來分析一下上面的代碼:

  •     除了檢查q是否存在于request.GET之外,我們還檢查來reuqest.GET[‘q']的值是否為空。
  •     我們使用Book.objects.filter(title__icontains=q)獲取數(shù)據(jù)庫中標(biāo)題包含q的書籍。 icontains是一個查詢關(guān)鍵字。這個語句可以理解為獲取標(biāo)題里包含q的書籍,不區(qū)分大小寫。
  •     這是實現(xiàn)書籍查詢的一個很簡單的方法。 我們不推薦在一個包含大量產(chǎn)品的數(shù)據(jù)庫中使用icontains查詢,因為那會很慢。 (在真實的案例中,我們可以使用以某種分類的自定義查詢系統(tǒng)。 在網(wǎng)上搜索“開源 全文搜索”看看是否有好的方法)

    最后,我們給模板傳遞來books,一個包含Book對象的列表。 查詢結(jié)果的顯示模板search_results.html如下所示:

<p>You searched for: <strong>{{ query }}</strong></p>

{% if books %}
  <p>Found {{ books|length }} book{{ books|pluralize }}.</p>
  <ul>
    {% for book in books %}
    <li>{{ book.title }}</li>
    {% endfor %}
  </ul>
{% else %}
  <p>No books matched your search criteria.</p>
{% endif %}

    注意這里pluralize的使用,這個過濾器在適當(dāng)?shù)臅r候會輸出s(例如找到多本書籍)。

相關(guān)文章

  • Django框架中間件(Middleware)用法實例分析

    Django框架中間件(Middleware)用法實例分析

    這篇文章主要介紹了Django框架中間件(Middleware)用法,結(jié)合實例形式分析了Django框架中間件(Middleware)的功能、用法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • python機器學(xué)習(xí)實戰(zhàn)之樹回歸詳解

    python機器學(xué)習(xí)實戰(zhàn)之樹回歸詳解

    這篇文章主要為大家詳細(xì)介紹了python機器學(xué)習(xí)實戰(zhàn)之樹回歸的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • flask的orm框架SQLAlchemy查詢實現(xiàn)解析

    flask的orm框架SQLAlchemy查詢實現(xiàn)解析

    這篇文章主要介紹了flask的orm框架SQLAlchemy查詢實現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Python?UnicodedecodeError編碼問題解決方法匯總

    Python?UnicodedecodeError編碼問題解決方法匯總

    本文主要介紹了Python?UnicodedecodeError編碼問題解決方法匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 使用Python實現(xiàn)繪制發(fā)散條形圖

    使用Python實現(xiàn)繪制發(fā)散條形圖

    發(fā)散條形圖用于簡化多個組的比較,它許我們比較各組中的數(shù)值,還幫助我們快速地想象出有利的和不利的或積極的和消極的反應(yīng),下面我們就來看看如何使用Python繪制發(fā)散條形圖吧
    2024-04-04
  • 對PyTorch中inplace字段的全面理解

    對PyTorch中inplace字段的全面理解

    這篇文章主要介紹了對PyTorch中inplace字段的全面理解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python中文分詞教程之前向最大正向匹配算法詳解

    python中文分詞教程之前向最大正向匹配算法詳解

    中文分詞是中文文本處理的一個基礎(chǔ)性工作,然而長久以來,在Python編程領(lǐng)域,一直缺少高準(zhǔn)確率、高效率的分詞組件。下面這篇文章主要給大家介紹了關(guān)于python中文分詞教程之前向最大正向匹配算法的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • 詳解PyCharm安裝MicroPython插件的教程

    詳解PyCharm安裝MicroPython插件的教程

    PyCharm可以說是當(dāng)今最流行的一款Python IDE了,大部分購買TPYBoard的小伙伴都會使用PyCharm編寫MicroPython的程序。這篇文章給大家介紹了PyCharm安裝MicroPython插件的教程,需要的朋友參考下吧
    2019-06-06
  • 如何使用Python異步之上下文管理器

    如何使用Python異步之上下文管理器

    這篇文章主要為大家介紹了如何使用Python異步之上下文管理器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • python各種語言間時間的轉(zhuǎn)化實現(xiàn)代碼

    python各種語言間時間的轉(zhuǎn)化實現(xiàn)代碼

    這篇文章主要介紹了python各種語言間時間的轉(zhuǎn)化,需要的朋友可以參考下
    2016-03-03

最新評論

武陟县| 荔浦县| 安仁县| 固安县| 绵竹市| 长海县| 比如县| 乐平市| 沙田区| 新泰市| 宁城县| 通州市| 东阿县| 甘德县| 大兴区| 满洲里市| 尚志市| 楚雄市| 霍州市| 荃湾区| 丽江市| 巴东县| 皋兰县| 上饶县| 明光市| 潞城市| 石河子市| 阿拉善盟| 瑞金市| 康定县| 宝清县| 息烽县| 海南省| 咸丰县| 邯郸市| 彭阳县| 汤阴县| 长泰县| 民丰县| 南郑县| 云霄县|