python測試開發django-24.表單提交之get請求


前言

通常我們需要在html頁面上輸入框里面輸入數據,比如登錄的時候,輸入賬號和密碼,點提交按鈕。
從html把數據提交到服務端,服務端接收數據后判斷提交的數據,然后做出對應的響應,這么一整個流程就是表單相關的知識點,涉及到數據的交互。

form表單

表單在html中由<form>標簽實現,一個完整的表單包含四個部分:提交地址、請求方式、元素控件、提交按鈕,簡單的html表單如下

  • action 提交地址,設置用戶提交的數據由哪個url接收和處理
  • method 請求方式,get或post請求
  • input 元素控件, 輸入文本信息
  • submit 提交按鈕,觸發提交動作
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>測試你的QQ號</title>
</head>
<body>
<p>請輸入你的QQ號</p>

<form action="/result" method="get">
    qq: <input type="text" name="q"> <br>
    <br>
    <input type="submit" value="提交">
</form>

</body>
</html>

get請求提交

把上面的html報錯為get_demo.html,放到templates目錄下,views.py寫個訪問

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

# 測試QQ號訪問頁面
def test_qq(request):
    return render(request, 'get_demo.html')

# 提交后返回頁面
def result_qq(request):
    return HttpResponse("提交成功!")

urls.py訪問地址

from django.conf.urls import url
from django.urls import re_path, path
from hello import views

urlpatterns = [

    url(r'^qq/', views.test_qq),
    url(r'^result/', views.result_qq),
]

在瀏覽器輸入http://localhost:8002/qq/,打開頁面如下

輸入QQ號點擊提交,頁面顯示:提交成功!

獲取提交參數(request.GET)

html上的數據提交后,我們希望能獲取到提交的數據,然后對數據做個簡單的處理,跟進不同的數據返回不同的結果。
我這里寫個簡單的案例,接收到用戶提交的QQ號,對QQ號做個簡單判斷,奇數返回“大吉大利”,偶數返回“恭喜發財”

# views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def test_qq(request):
    '''請求頁面'''
    return render(request, 'get_demo.html')

def result_qq(request):
    '''返回結果'''
    if request.method == 'GET':
        # 獲取提交的數據
        r = request.GET["q"]  # key就是前面輸入框里的name屬性對應值name="q"
        res = ""
        try:
            if int(r) %2:
                res = "大吉大利!"
            else:
                res = "恭喜發財!"
        except:
            res = "請輸入正確QQ號!"

        return HttpResponse("測試結果:%s"%res)
    else:
        render(request, 'get_demo.html')

request.GET 可以看成一個字典,用GET方法傳遞的值都會保存到其中,可以用 request.GET['key_name']來取值,但是當key值不存在時,會報錯“MultiValueDictKeyError”。

為了避免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庫,通過輸入用戶名,查詢到對應的emali地址,參考https://www.cnblogs.com/yoyoketang/p/10335212.html

實現功能:通過輸入用戶名稱name值,查詢到對應的email地址,測試數據如下

templates/name.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>查詢結果:{{email}} </p>
</body>
</html>

action=""表示返回頁面就是當前頁面,這里視圖函數寫一個即可

# views.py

from django.shortcuts import render
from django.http import HttpResponse
from hello.models import User
# Create your views here.

def user(request):
    '''請求頁面-返回結果'''
    res = ""
    if request.method == 'GET':
        # 獲取提交的數據
        # r = request.GET["q"] # key就是前面輸入框里的name屬性對應值name="q"
        n = request.GET.get('name', None)  # key不存在時不會報錯
        res = User.objects.filter(user_name="%s" % n)
        try:
            res = res[0].mail
        except:
            res = "未查詢到數據"
        return render(request, 'name.html', {'email': res})
    else:
        return render(request, 'name.html', {'email': res})

訪問地址和返回地址

# urls.py
from django.conf.urls import url
from hello import views

urlpatterns = [
    # 新增用戶
    url(r'^email/', views.user),
]

html顯示效果如下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM