Django框架入門五__表單提交HTTP GET/POST請求與Request,QueryDict對象
標簽: django python GET POST Request
文章目錄
1. GET方法提交表單
根據上節的目錄,在 myFirstDjango/
創建 search.py
并添加如下內容
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: JinWenChao
@file: search
@time: 2020/12/3 14:34
"""
from django.http import HttpResponse
from django.shortcuts import render
# 轉發到 search_form.html 頁面
def redirect_form(request):
return render(request, 'search_form.html')
# 接收get請求的表單數據
def search_get(request):
request.encoding = 'utf-8'
if 'value' in request.GET and request.GET['value']:
message = '你搜索的內容為: ' + request.GET['value']
else:
message = '你提交了空表單'
return HttpResponse(message)
在 myFirstDjango/urls.py
中添加如下內容
from django.urls import path
from django.conf.urls import url
from . import views, testdb, search
# 此項就是django的url配置
urlpatterns = [
path('TmplUseTag', views.TmplUseTag),
path('testdb', testdb.testdb),
# 使用正則表達式的校驗方式校驗URL,映射到 search.redirect_form
url(r'^redirect_form/$', search.redirect_form),
url(r'^search_get/$', search.search_get),
]
在 templates
文件下創建 search_form.html
并添加如下內容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>GET請求提交表單</title>
</head>
<body>
{% comment %}
action : 表單提交地址
method : 提交方式為GET
{% endcomment %}
<form action="/search_get/" method="get">
<input type="text" name="value">
<input type="submit" value="搜索">
</form>
</body>
</html>
啟動服務,訪問 http://localhost:8080/redirect_form/
會給你返回 search_form.html
頁面
在輸入框中輸入參數,點擊搜索,輸出如下
2. POST方法提交表單
在 myFirstDjango/search.py
中添加如下內容
# 接收POST請求數據
def search_post(request):
"""
接收到請求數據后,判斷當前請求是POST的話
直接返回 search_post.html 頁面,并且傳參數 result
:param request:
:return:
"""
result = {}
if request.POST:
result['result'] = request.POST['value']
return render(request, "search_post.html", result)
在 myFirstDjango/urls.py
中添加如下內容
from django.urls import path
from django.conf.urls import url
from . import views, testdb, search
# 此項就是django的url配置
urlpatterns = [
path('TmplUseTag', views.TmplUseTag),
path('testdb', testdb.testdb),
# 使用正則表達式的校驗方式校驗URL,映射到 search.redirect_form
url(r'^redirect_form/$', search.redirect_form),
# get請求視圖
url(r'^search_get/$', search.search_get),
# post請求視圖
url(r'^search-post/$', search.search_post)
]
在 templates
文件下創建 search_post.html
并添加如下內容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>POST提交表單結果</title>
</head>
<body>
<form action="/search-post/" method="post">
{% csrf_token %}
<input type="text" name="value">
<input type="submit" value="搜索">
</form>
{% comment %}
點擊搜索后,搜索內容會回顯到下方的P標簽
{% endcomment %}
<p>搜索: {{ result }}</p>
</body>
</html>
啟動服務,訪問 http://localhost:8080/search-post/
會給你返回 search_post.html
頁面
輸入框中輸入內容,回顯到下方P標簽中
3. Request 對象
每個視圖函數的第一個參數是一個 HttpRequest 對象,就像下面這個 search_post() 函數
def search_post(request):
result = {}
if request.POST:
result['result'] = request.POST['value']
return render(request, "search_post.html", result)
3.1 HttpRequest對象包含當前請求URL的一些信息
屬性 | 描述 |
---|---|
path | 請求頁面的全路徑,不包括域名—例如, “/hello/” |
method | 請求中使用的HTTP方法的字符串全大寫表示 例如: if request.method == ‘GET’: |
GET | 包含所有HTTP GET參數的類字典對象。參見QueryDict 文檔 |
POST | ![]() |
REQUEST | ![]() |
COOKIES | 包含所有cookies的標準Python字典對象。Keys和values都是字符串 |
FILES | ![]() |
META | ![]() ![]() |
user | ![]() ![]() |
session | 唯一可讀寫的屬性,代表當前會話的字典對象。只有**Django中的session支持時該屬性才可用 |
raw_post_data | 原始HTTP POST數據,未解析過。 高級處理時會有用處 |
__getitem__(key) | ![]() |
has_key() | 檢查request.GET or request.POST中是否包含參數指定的Key |
get_full_path() | 返回包含查詢字符串的請求路徑。例如, “/music/bands/the_beatles/?print=true” |
is_secure() | 如果請求是安全的,返回True,就是說,發出的是HTTPS請求 |
4. QueryDict對象
- 在HttpRequest對象中, GET和POST屬性是django.http.QueryDict類的實例
- QueryDict類似字典的自定義類,用來處理單鍵對應多值的情況
- QueryDict實現所有標準的詞典方法。還包括一些特有的方法
4.1 QueryDict 方法表
方法 | 描述 |
---|---|
__getitem__ | 和標準字典的處理有一點不同,就是,如果Key對應多個Value,__getitem__() 返回最后一個value |
__setitem__ | 設置參數指定key的value列表(一個Python list)。注意:它只能在一個mutable QueryDict 對象上被調用(就是通過copy()產生的一個QueryDict對象的拷貝) |
get() | 如果key對應多個value,get()返回最后一個value |
update() | 參數可以是QueryDict,也可以是標準字典。和標準字典的update方法不同,該方法添加字典 items,而不是替換它們![]() |
items() | 和標準字典的items()方法有一點不同,該方法使用單值邏輯的__getitem__()![]() |
values() | 和標準字典的values()方法有一點不同,該方法使用單值邏輯的__getitem__() |
copy() | 返回對象的拷貝,內部實現是用Python標準庫的copy.deepcopy()。該拷貝是mutable(可更改的) — 就是說,可以更改該拷貝的值 |
getlist(key) | 返回和參數key對應的所有值,作為一個Python list返回。如果key不存在,則返回空list。 It's guaranteed to return a list of some sort.. |
setlist(key,list_) | 設置key的值為list_ (unlike __setitem__()) |
appendlist(key,item) | 添加item到和key關聯的內部list |
setlistdefault(key,list) | 和setdefault有一點不同,它接受list而不是單個value作為參數 |
lists() | 和items()有一點不同, 它會返回key的所有值,作為一個list![]() |
借鑒 https://www.runoob.com/django/django-form.html
智能推薦
Python開發Django框架入門(MVC與MTV模式)
Django框架 1、Django簡介 搭建Django環境 Django安裝 創建Diango項目 啟動Django 2、視圖View 3、模型Model 配置數據 創建模型 **模型 使用API 4、模板Template 模板 視圖 綁定鏈接 5、使用MVT模式實現數據庫增刪改查 表單設計 命名空間,多個應用以防混淆 添加書籍功能 刪除書籍 總結 1、Django簡介 搭建Django環境 D...
Http協議GET與POST
實例操作工具使用telnet cmd 下telnet localhost 80 再按Ctrl 加 ] ,最后按下回車,輸入請求 (注) 在Http1.1中,協議中必須要有請求行和Host請求頭,如果是http1.0中則不必要加入Host GET /test.html HTTP/1.0 Host: GET方式傳遞時,數據量有限制,一般在1KB以下...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...