python測試開發django(22)--表單提交之get請求
前言
通常我們需要在html頁面上輸入框裡面輸入資料,比如登入的時候,輸入賬號和密碼,點提交按鈕。
從html把資料提交到服務端,服務端接收資料後判斷提交的資料,然後做出對應的響應,這麼一整個流程就是表單相關的知識點,涉及到資料的互動。
form表單
表單在html中由<form>標籤實現,一個完整的表單包含四個部分:提交地址、請求方式、元素控制元件、提交按鈕,簡單的html表單如下
- action 提交地址,設定使用者提交的資料由哪個url接收和處理
- method 請求方式,get或post請求
- input 元素控制元件,輸入文字資訊
- submit提交按鈕,觸發提交動作
備註:將該html儲存為a_get.html,action="/t2","/t2"應與urls.py中的某個路徑地址一致;
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>測試你的支付寶號</title> </head> <body> <p>請輸入你的支付寶賬號</p> <form action="/t2" method="get"> 支付寶:<input type="text" name="q"><br> <br> <input type="submit" value="提交"> </form> </body> </html>
get請求提交
把上面的html儲存為a_get.html,放到templates目錄下,views.py寫個訪問;
from django.shortcuts import render from django.http import HttpResponse def test1(request): return render(request,'a_get.html') def test2(request): return HttpResponse("提交成功!")
urls.py訪問地址
from django.conf.urls import url from tb import views urlpatterns = [ url('^t1/',views.test1), url('^t2/',views.test2), ]
在瀏覽器輸入http://127.0.0.1:8000/t1/,開啟頁面如下,
輸入支付寶號,點選提交,頁面顯示:提交成功!
獲取提交引數(request.GET)
html上的資料提交後,我們希望能獲得到提交的資料,然後對資料做個簡單的處理,跟進不同的資料返回不同的結果。
我這裡寫個簡單的案例,接收到使用者提交的qq號,對qq號做個簡單判斷,奇數返回“大吉大利”,偶數返回“恭喜發財”
#views的程式碼如下; #備註因為有時在公司學習,有時在家裡學習,所以工程和app名稱不同,順便也可以提升下應變能力了;
#coding:utf-8 from django.shortcuts import render from django.http import HttpResponse # Create your views here. def test1(request): return render(request,'a_get.html') def test2(request): if request.method=='GET': r=request.GET["q"] #key就是前面輸入框裡的name屬性對應值name="q" ra="" try: if int(r)%2: ra="大吉大利" else: ra="恭喜發財!" except: ra="請輸入正確的qq號" return HttpResponse("測試結果:{}!".format(ra))
urls.py中部分程式碼如下,記得將a_get.html的action改成/rs;
urlpatterns=[ url('^t1/',views.test1), url('^rs/',views.test2), ]
request.GET可以看成一個字典,用GET方法傳遞的值都會儲存到其中,可以用request.GET['key_name']來取值,但是當key值不存在時,會報錯500的錯誤;
為了避免key值不存在時報錯,這裡可以用另外一種寫法:request.GET.get('key_name',None)
#獲取提交的資料 #r=request.GET["q"] #key_name就是前面輸入框裡的name屬性對應值name="q" r=request.GET.get('q',None) #key_name不存在時,不報錯
查詢資料庫返回
通常查詢涉及到查詢資料庫,與資料庫會有資料互動,接著前面的User庫,通過輸入使用者名稱,查詢到對應的email地址,
實現功能:通過輸入使用者名稱稱name值,查詢到對應的email地址,測試資料如下
templates/get_mail.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>查詢mail</title> </head> <body> <form action="" method="get"> 輸入使用者名稱:<input type="text" name="name"> <br> <br> <input type="submit" value="提交"> </form> <p>查詢結果:{{result}}</p> </body> </html>
action=""表示返回頁面就是當前頁面,這裡檢視函式寫一個即可;views.py內容如下
#coding:utf-8 from django.shortcuts import render from django.http import HttpResponse from .models import Users # Create your views here. def mail(request): rs="" if request.method=='GET': v=request.GET.get('name',None) rs=Users.objects.filter(user_name='{}'.format(v)) try: rs=rs[0].mail except: rs="未查詢到資料" return render(request,'get_mail.html',{"result":rs}) else: return render(request,'get_mail.html',{'result':rs})
訪問地址和返回地址;
#helloworld/helloworld/urls.py from django.conf.urls import url from . import testdb from xjyn import views urlpatterns=[ url('^t1/',views.mail), ]
html顯示效果如下