Django(part17)--form表单提交数据
學習筆記,僅供參考,有錯必糾
form表單
form表單的主要作用是和服務器進行交互,為服務器端提供數據。
- name屬性
form表單有name屬性,name屬性類似于客戶端與服務器端之間的約定。
form表單中能使用name屬性的標簽:
<input> <select> <textarea>form表單提交數據案例
首先,我們新建一個工程mywebsite3:
django-admin startproject mywebsite3開啟服務:
python manage.py runserver在項目文件夾下,新建一個模板文件夾templates,并更改settgins.py中TEMPLATES列表里的DIRS,設置模板路徑:
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},}, ]在項目下的mywebsite3文件夾中新建試圖模塊views.py,并創建本案例所需的視圖函數:
# -*- coding: utf-8 -*-from django.http import HttpResponse from django.shortcuts import renderdef test_form(request):'此視圖函數用于示意form表單的提交'if request.method == 'GET':# 返回表單return render(request, 'test_form.html')elif request.method == 'POST':# 返回表單提交內容的結果return HttpResponse("沒有結果")設置路由(urls.py):
from django.contrib import admin from django.urls import path from django.urls import re_path from . import viewsurlpatterns = [path('admin/', admin.site.urls),re_path(r'^test_form/$', views.test_form) ]test_form.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Yes!</title> </head> <body><form><div>兔兔姓名:<input type="text" name="bunnyname"></div><div><input type="submit" value="提交"></div></form></body> </html>在這個HTML文檔中,我們的form標簽沒有設定任何屬性值,這意味著數據將提交到當前頁面,且默認請求方式為GET(method=‘GET’)
向http://127.0.0.1:8000/test_form/發起請求
輸入兔兔姓名為Huang,并提交:
可以看到 提交的數據(Huang) 以及input標簽的 name屬性值(bunnyname) 均以查詢參數的方式增加到url中.
現在,我們嘗試一下提交表單數據到服務器,首先,我們要在settings.py中把中間鍵注釋掉:
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',#'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware', ]我們更改一下test_form.html,在其中增加3個多選框,設置其name屬性為fav,并將其請求方式改變為POST:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Yes!</title> </head> <body><form method="POST"><div>兔兔姓名:<input type="text" name="bunnyname"></div><div>兔兔年齡:<input type="text" name="bunnyage"></div><div>兔兔食物:<input type="text" name="bunnyfood"></div>愛好:<input type="checkbox" name="fav" value="吃飯">吃飯 <input type="checkbox" name="fav" value="睡覺">睡覺<input type="checkbox" name="fav" value="舔毛">舔毛<div><input type="submit" value="提交"></div></form></body> </html>再更改一下views.py:
def test_form(request):'此視圖函數用于示意form表單的提交'if request.method == 'GET':# 返回表單return render(request, 'test_form.html')elif request.method == 'POST':# 返回表單提交內容的結果dic = dict(request.POST)print("提交的內容是:" , dic)html = request.POST.get("bunnyname", "") + "的信息"return HttpResponse(html)向http://127.0.0.1:8000/test_form/發起請求,并輸入數據,點擊提交:
得到如下結果:
再看一下我們的cmd界面中的輸出:
提交的內容是: {'bunnyname': ['Huang'], 'bunnyage': ['10'], 'bunnyfood': ['兔糧'], 'fav': ['吃飯', '舔毛']}如果我想獲取鍵"fav"所對應的列表里的全部數據,那么我們可以使用request.POST.getlist()方法獲取:
views.py
def test_form(request):'此視圖函數用于示意form表單的提交'if request.method == 'GET':# 返回表單return render(request, 'test_form.html')elif request.method == 'POST':# 返回表單提交內容的結果dic = dict(request.POST)print("提交的內容是:" , dic)fav = request.POST.getlist('fav')print("fav=", fav) html = request.POST.get("bunnyname", "") + "的信息"return HttpResponse(html)向http://127.0.0.1:8000/test_form/發起請求,并輸入數據,點擊提交:
cmd中的輸出為:
提交的內容是: {'bunnyname': ['Huang'], 'bunnyage': ['10'], 'bunnyfood': ['胡蘿卜'], 'fav': ['吃飯', '睡覺', '舔毛']} fav= ['吃飯', '睡覺', '舔毛']從結果可知,我們拿到了fav中的列表。
我們在test_form.html中加入一個大文本框,并設置其name屬性為note:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Yes!</title> </head> <body><form method="POST"><div>兔兔姓名:<input type="text" name="bunnyname"></div><div>兔兔年齡:<input type="text" name="bunnyage"></div><div>兔兔食物:<input type="text" name="bunnyfood"></div>愛好:<input type="checkbox" name="fav" value="吃飯">吃飯 <input type="checkbox" name="fav" value="睡覺">睡覺<input type="checkbox" name="fav" value="舔毛">舔毛<div><textarea rows="10" cols="20" name="note">備注</textarea> </div><div><input type="submit" value="提交"></div></form></body> </html>向http://127.0.0.1:8000/test_form/發起請求,并輸入數據,點擊提交:
看一看cmd中的輸出:
提交的內容是: {'bunnyname': ['Huang'], 'bunnyage': ['10'], 'bunnyfood': ['兔糧'], 'fav': ['吃飯', '舔毛'], 'note': ['安徽財經大學\r\n應用統計\t\t']} fav= ['吃飯', '舔毛']總結
以上是生活随笔為你收集整理的Django(part17)--form表单提交数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iphone3gs拆机教程
- 下一篇: Django(part18)--静态文件