<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
HTML表單是網站互動性的經典方式。 本章將介紹如何用Django對使用者提交的表單資料進行處理。
HTTP協定以"請求-回覆"的方式工作。客戶傳送請求時,可以在請求中附加資料。伺服器通過解析請求,就可以獲得客戶傳來的資料,並根據URL來提供特定的服務。
我們在之前的專案中建立一個 search.py 檔案,用於接收使用者的請求:
/HelloWorld/HelloWorld/search.py 檔案程式碼:
# -*- coding: utf-8 -*- from django.http import HttpResponse from django.shortcuts import render_to_response # 表單 def search_form(request): return render_to_response('search_form.html') # 接收請求資料 def search(request): request.encoding='utf-8' if 'q' in request.GET and request.GET['q']: message = '你搜尋的內容為: ' + request.GET['q'] else: message = '你提交了空表單' return HttpResponse(message)
在模板目錄 templates 中新增 search_form.html 表單:
/HelloWorld/templates/search_form.html 檔案程式碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鳥教學(runoob.com)</title> </head> <body> <form action="/search" method="get"> <input type="text" name="q"> <input type="submit" value="搜尋"> </form> </body> </html>
urls.py 規則修改為如下形式:
/HelloWorld/HelloWorld/urls.py 檔案程式碼:
from django.conf.urls import url from . import view,testdb,search urlpatterns = [ url(r'^hello$', view.hello), url(r'^testdb$', testdb.testdb), url(r'^search-form$', search.search_form), url(r'^search$', search.search), ]
存取地址 http://127.0.0.1:8000/search-form 並搜尋,結果如下所示:
上面我們使用了GET方法。檢視顯示和請求處理分成兩個函數處理。
提交資料時更常用POST方法。我們下面使用該方法,並用一個URL和處理常式,同時顯示檢視和處理請求。
我們在 templates 建立 post.html:
/HelloWorld/templates/post.html 檔案程式碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鳥教學(runoob.com)</title> </head> <body> <form action="/search-post" method="post"> {% csrf_token %} <input type="text" name="q"> <input type="submit" value="Submit"> </form> <p>{{ rlt }}</p> </body> </html>
在模板的末尾,我們增加一個 rlt 記號,為表格處理結果預留位置。
表格後面還有一個{% csrf_token %}的標籤。csrf 全稱是 Cross Site Request Forgery。這是Django提供的防止偽裝提交請求的功能。POST 方法提交的表格,必須有此標籤。
在HelloWorld目錄下新建 search2.py 檔案並使用 search_post 函數來處理 POST 請求:
/HelloWorld/HelloWorld/search2.py 檔案程式碼:
# -*- coding: utf-8 -*- from django.shortcuts import render from django.views.decorators import csrf # 接收POST請求資料 def search_post(request): ctx ={} if request.POST: ctx['rlt'] = request.POST['q'] return render(request, "post.html", ctx)
urls.py 規則修改為如下形式:
/HelloWorld/HelloWorld/urls.py 檔案程式碼:
from django.conf.urls import url from . import view,testdb,search,search2 urlpatterns = [ url(r'^hello$', view.hello), url(r'^testdb$', testdb.testdb), url(r'^search-form$', search.search_form), url(r'^search$', search.search), url(r'^search-post$', search2.search_post), ]
存取 http://127.0.0.1:8000/search-post 顯示結果如下:
完成以上範例後,我們的目錄結構為:
HelloWorld |-- HelloWorld | |-- __init__.py | |-- __init__.pyc | |-- search.py | |-- search.pyc | |-- search2.py | |-- search2.pyc | |-- settings.py | |-- settings.pyc | |-- testdb.py | |-- testdb.pyc | |-- urls.py | |-- urls.pyc | |-- view.py | |-- view.pyc | |-- wsgi.py | `-- wsgi.pyc |-- TestModel | |-- __init__.py | |-- __init__.pyc | |-- admin.py | |-- admin.pyc | |-- apps.py | |-- migrations | | |-- 0001_initial.py | | |-- 0001_initial.pyc | | |-- __init__.py | | `-- __init__.pyc | |-- models.py | |-- models.pyc | |-- tests.py | `-- views.py |-- db.sqlite3 |-- manage.py `-- templates |-- base.html |-- hello.html |-- post.html `-- search_form.html
每個 view 函數的第一個引數是一個 HttpRequest 物件,就像下面這個 hello() 函數:
from django.http import HttpResponse def hello(request): return HttpResponse("Hello world")
HttpRequest物件包含當前請求URL的一些資訊:
Request物件也有一些有用的方法:
在HttpRequest物件中, GET和POST屬性是django.http.QueryDict類的範例。
QueryDict類似字典的自定義類,用來處理單鍵對應多值的情況。
QueryDict實現所有標準的詞典方法。還包括一些特有的方法:
此外, QueryDict也有一些方法,如下表:
到此這篇關於Django框架中表單用法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45