ホームページ バックエンド開発 Python チュートリアル Python的Django框架中的表单处理示例

Python的Django框架中的表单处理示例

Jun 06, 2016 am 11:13 AM
django 形状

组建一个关于书籍、作者、出版社的例子:

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()

ログイン後にコピー

我们现在来创建一个简单的view函数以便让用户可以通过书名从数据库中查找书籍。
通常,表单开发分为两个部分: 前端HTML页面用户接口和后台view函数对所提交数据的处理过程。 第一部分很简单;现在我们来建立个view来显示一个搜索表单:

from django.shortcuts import render_to_response

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

ログイン後にコピー

这个view函数可以放到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 这样的语句,因为前者看起来更简洁。)

现在,如果你运行 runserver 命令,然后访问http://127.0.0.1:8000/search-form/,你会看到搜索界面。 非常简单。

不过,当你通过这个form提交数据时,你会得到一个Django 404错误。 这个Form指向的URL /search/ 还没有被实现。 让我们添加第二个视图函数并设置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)

ログイン後にコピー

暂时先只显示用户搜索的字词,以确定搜索数据被正确地提交给了Django,这样你就会知道搜索数据是如何在这个系统中传递的。 简而言之:

在HTML里我们定义了一个变量q。当提交表单时,变量q的值通过GET(method=”get”)附加在URL /search/上。

处理/search/(search())的视图通过request.GET来获取q的值。

需要注意的是在这里明确地判断q是否包含在request.GET中。就像上面request.META小节里面提到,对于用户提交过来的数据,甚至是正确的数据,都需要进行过滤。 在这里若没有进行检测,那么用户提交一个空的表单将引发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)

ログイン後にコピー

查询字符串参数

因为使用GET方法的数据是通过查询字符串的方式传递的(例如/search/?q=django),所以我们可以使用requet.GET来获取这些数据。我们知道在视图里可以使用request.GET来获取传统URL里的查询字符串(例如hours=3)。

获取使用POST方法的数据与GET的相似,只是使用request.POST代替了request.GET。那么,POST与GET之间有什么不同?当我们提交表单仅仅需要获取数据时就可以用GET; 而当我们提交表单时需要更改服务器数据的状态,或者说发送e-mail,或者其他不仅仅是获取并显示数据的时候就使用POST。 在这个搜索书籍的例子里,我们使用GET,因为这个查询不会更改服务器数据的状态。 (如果你有兴趣了解更多关于GET和POST的知识,可以参见http://www.w3.org/2001/tag/doc/whenToUseGet.html。)

既然已经确认用户所提交的数据是有效的,那么接下来就可以从数据库中查询这个有效的数据(同样,在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)获取数据库中标题包含q的书籍。 icontains是一个查询关键字。这个语句可以理解为获取标题里包含q的书籍,不区分大小写。
  • 这是实现书籍查询的一个很简单的方法。 我们不推荐在一个包含大量产品的数据库中使用icontains查询,因为那会很慢。 (在真实的案例中,我们可以使用以某种分类的自定义查询系统。 在网上搜索“开源 全文搜索”看看是否有好的方法)

最后,我们给模板传递来books,一个包含Book对象的列表。 查询结果的显示模板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的使用,这个过滤器在适当的时候会输出s(例如找到多本书籍)。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Djangoのバージョンを確認する方法 Djangoのバージョンを確認する方法 Dec 01, 2023 pm 02:25 PM

Django のバージョンを確認する手順: 1. ターミナルまたはコマンド プロンプト ウィンドウを開きます; 2. Django がインストールされていることを確認します Django がインストールされていない場合は、パッケージ管理ツールを使用してインストールし、 pip install django コマンドを入力します。 3. インストールが完了したら、python -m django --version を使用して Django のバージョンを確認できます。

Django フレームワークの長所と短所: 知っておくべきことすべて Django フレームワークの長所と短所: 知っておくべきことすべて Jan 19, 2024 am 09:09 AM

Django は、Web 開発ライフサイクルのあらゆる側面をカバーする完全な開発フレームワークです。現在、このフレームワークは世界中で最も人気のある Web フレームワークの 1 つです。 Django を使用して独自の Web アプリケーションを構築する場合は、Django フレームワークの長所と短所を理解する必要があります。具体的なコード例も含め、知っておくべきことはすべてここにあります。 Django の利点: 1. 迅速な開発 - Django は Web アプリケーションを迅速に開発できます。豊富なライブラリと内部を提供します。

Django vs. Flask: Python Web フレームワークの比較分析 Django vs. Flask: Python Web フレームワークの比較分析 Jan 19, 2024 am 08:36 AM

Django と Flask はどちらも Python Web フレームワークのリーダーであり、それぞれに独自の利点と適用可能なシナリオがあります。この記事では、これら 2 つのフレームワークを比較分析し、具体的なコード例を示します。開発の概要 Django はフル機能の Web フレームワークであり、その主な目的は、複雑な Web アプリケーションを迅速に開発することです。 Django は、ORM (オブジェクト リレーショナル マッピング)、フォーム、認証、管理バックエンドなどの多くの組み込み機能を提供します。これらの機能により、Django は大規模なデータを処理できるようになります。

Djangoのバージョンを確認する方法 Djangoのバージョンを確認する方法 Nov 30, 2023 pm 03:08 PM

Django のバージョンを確認する方法: 1. コマンド ラインで確認するには、ターミナルまたはコマンド ライン ウィンドウで「python -m django --version」コマンドを入力します。 2. Python 対話型環境で確認するには、「import django」と入力します。 print(django.get_version())" code; 3. Django プロジェクトの設定ファイルを確認し、インストールされているアプリケーション情報を含む INSTALLED_APPS という名前のリストを見つけます。

Django のバージョンの違いは何ですか? Django のバージョンの違いは何ですか? Nov 20, 2023 pm 04:33 PM

違いは次のとおりです。 1. Django 1.x シリーズ: これは、バージョン 1.0、1.1、1.2、1.3、1.4、1.5、1.6、1.7、1.8、および 1.9 を含む、Django の初期バージョンです。これらのバージョンは主に基本的な Web 開発機能を提供します; 2. Django 2.x シリーズ: これは、2.0、2.1、2.2 およびその他のバージョンを含む Django の中期バージョンです; 3. Django 3.x シリーズ: これは最新バージョンですDjango シリーズ。バージョン 3.0、3 などを含む。

JavaScript を使用してフォームの入力ボックスの内容のリアルタイム検証を実装するにはどうすればよいですか? JavaScript を使用してフォームの入力ボックスの内容のリアルタイム検証を実装するにはどうすればよいですか? Oct 18, 2023 am 08:47 AM

JavaScript を使用してフォームの入力ボックスの内容のリアルタイム検証を実装するにはどうすればよいですか?多くの Web アプリケーションでは、フォームがユーザーとシステム間の対話の最も一般的な方法です。ただし、データの正確性と完全性を保証するために、ユーザーが入力したコンテンツを検証する必要があることがよくあります。この記事では、JavaScript を使用してフォームの入力ボックスの内容のリアルタイム検証を実装する方法を学び、具体的なコード例を示します。フォームの作成 まず、HTML で簡単なテーブルを作成する必要があります。

Django バージョンをアップグレードする方法: 手順と考慮事項 Django バージョンをアップグレードする方法: 手順と考慮事項 Jan 19, 2024 am 10:16 AM

Django バージョンをアップグレードする方法: 手順と考慮事項、必要な特定のコード例 はじめに: Django は、より優れたパフォーマンスとより多くの機能を提供するために継続的に更新およびアップグレードされる強力な Python Web フレームワークです。ただし、古いバージョンの Django を使用している開発者にとって、Django のアップグレードはいくつかの課題に直面する可能性があります。この記事では、Djangoのバージョンアップの手順や注意点、具体的なコード例を紹介します。 1. Djan をアップグレードする前にプロジェクト ファイルをバックアップします。

JavaScript を使用してフォームの入力ボックスの内容の自動プロンプト機能を実現するにはどうすればよいですか? JavaScript を使用してフォームの入力ボックスの内容の自動プロンプト機能を実現するにはどうすればよいですか? Oct 20, 2023 pm 04:01 PM

JavaScript を使用してフォームの入力ボックスの内容の自動プロンプト機能を実現するにはどうすればよいですか?はじめに: フォーム入力ボックスの内容の自動プロンプト機能は、Web アプリケーションでは非常に一般的であり、ユーザーが正しい内容を迅速に入力するのに役立ちます。この記事では、JavaScript を使用してこの機能を実現する方法と、具体的なコード例を紹介します。 HTML 構造の作成 まず、入力ボックスと自動提案リストを含む HTML 構造を作成する必要があります。次のコードを使用できます: &lt;!DOCTYP

See all articles