1. 程式人生 > 實用技巧 >python測試開發django(22)--表單提交之get請求

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顯示效果如下