Django Request範例

Steven Wang
4 min readFeb 21, 2019

--

HTTP协议Request屬性

(一)
method:返回当前请求方法。

(二)
POST:返回HTTP POST Request的参数,它是QueryDict字典类型数据,包含了客户端提交表单数据,key是客户端控件名,value值是客户端控件的值。

客戶端用POST方式向server發出Request,會將數值包裝成dict字典提交給server

控件要有"唯一性"的name
<input type=”text” name=”userid”/>

我們就可以在server端透過key取得控件的value,例如密碼框,進而得到客戶端的信息

(三)GET:返回HTTP GET Request的参数,它是QueryDict字典类型数据。是客户端提交参数,参数是跟在URL的?后面的内容,http://127.0.0.1:8000/books/login/?userid=tony&userpwd=12345

key是客户端控件名,value值是客户端控件的值

客戶端用Get的方式向server發出Request
數據放在地址欄?後面發給server

HttpResponse範例

說明
(1)submit 控件以POST方法將數值提交予主機 \book\login\

(2)def login取出數值,return render(request, ‘result.html’, {‘result’: datas})

(3)result.html用模板標籤 及 變量 顯示 {‘result’: datas}

login.html

<form action = “/books/login/” method = “POST”>
###或改成GET試試看
###action = “/books/login/”必須完整/books/login/(此處需跟地址欄訪問一樣)轉到views.login
action為url.py內的位置,是提交的對向

{% csrf_token %} ###防止csrf攻擊
<table width=”40%” border=”0">
<tbody>
<tr>
<td>用户ID:</td>
<td><input name=”userid” type=”text”/></td> ###name userid
</tr>
<tr>
<td>密码:</td>
<td><input name=”userpwd” type=”password”/></td> ###name userpwd
</tr>
<tr align=”center”>
<td colspan=”2">
<input type=”submit” value=”确定”> ###
<input type=”reset” value=”取消”>
</td>
</tr>
</tbody>
</table>
</form>

views.py

def login(request):
if request.method == ‘POST’:
datas = request.POST###request.POST方法提出數據
print(datas[‘userid’])
print(datas[‘userpwd’])
return render(request, ‘result.html’, {‘result’: datas})
else:
args_info = request.GET###request.GET方法提出數據
print(args_info[‘userid’])
print(args_info[‘userpwd’])
return render(request, ‘result.html’, {‘result’: args_info})

result.html

<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8">
<title>运行结果</title>
</head>
<body>
<table border=1>
{% for key, value in result.items %} ###模板標籤
###result.items方法> result對應views.login{‘result’: datas}
<tr>
<th> {{ key }}</th> ###變量
<td> {{ value }}</td> ###
</tr>
{% endfor %} ###
</table>
</body>
</html>

--

--

Steven Wang
Steven Wang

No responses yet