欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django學習之路之請求與響應

 更新時間:2022年02月15日 11:42:24   作者:lishuaigell  
這篇文章主要為大家詳細介紹了Django的請求與響應,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

前言

上一章節(jié)中我們講了如何引用靜態(tài)文件和模板,以及如何使用常見的Django命令等。那么這章我們就來聊聊Django是如何向瀏覽器發(fā)送數(shù)據(jù),以及我們怎么來接收瀏覽器返回的數(shù)據(jù)的。

在這里插入圖片描述

請求

什么是request

在我們的視圖函數(shù)中,每一個函數(shù)都有一個request參數(shù),那么這個request是什么呢?request是一個對象,封裝了用戶通過瀏覽器或爬蟲等發(fā)送過來的所有請求相關的數(shù)據(jù)。 注意,這里的 request 并不是 python requests模塊里面的。

GET與POST

GET與POST都是一種請求方式,一般我們在瀏覽器輸入一個網(wǎng)址訪問網(wǎng)站都是GET請求;在FORM表單中,可以通過設置Method指定提交方式為GET或者POST提交方式,其默認是GET提交方式。它們之間最直觀的區(qū)別就是GET把參數(shù)包含在URL中;POST通過request body傳遞參數(shù),它不會作為url的一部分,不會被緩存、保存在服務器日志、以及瀏覽器瀏覽記錄中。(一個看得到,一個看不到)

 request 有一個專門用來查看用戶的請求方式的方法——method?,F(xiàn)在就來驗證下吧! 我以上次的test函數(shù)為例,添加 print(request.method)語句, 它對應的網(wǎng)頁路徑是/hd

在這里插入圖片描述

那么我們點擊運行后訪問 http://127.0.0.1:8000/hd/

在這里插入圖片描述

再回到我們的pycharm就能看到訪問網(wǎng)頁使用的請求方式了,果然是get請求

在這里插入圖片描述

 另外,我們能夠通過request.GET獲取網(wǎng)頁上url傳遞過來的參數(shù)。怎么傳遞參數(shù)呢?在url后面輸入“ ?”,然后就能輸入?yún)?shù)了,多個參數(shù)用&連接。

 還是以剛才的 http://127.0.0.1:8000/hd/ 為例,在后面輸入?a=5&b=3變成
http://127.0.0.1:8000/hd/?a=5&b=3,最后在視圖函數(shù)test使用request.GET(GET必須大寫)方法接收,并打印結果。

在這里插入圖片描述

在這里插入圖片描述

 說完GET請求咱們再來結合例子說明一下POST請求。POST請求經(jīng)常出現(xiàn)在表單中,使用時需要用method指定。我們模擬一個非常簡單的用戶注冊界面:當我們輸入完用戶名和密碼后,希望用兩個變量接收它,方便以后存儲到數(shù)據(jù)庫。

 先制作一個簡單的HTML頁面。當我們提交表單數(shù)據(jù)后,跳轉至/save/頁面進行保存

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>用戶注冊</title>
</head>
<body>
<h1>用戶注冊系統(tǒng)</h1>
<form method="post" action="/save/">
   <p>用戶名:<input type="text" name="user" value="請輸入用戶名"></p>
    密  碼:<input type="password" name="password"></p>
   <p><input type="submit" value="注冊"></p>
</form>
</body>
</html>

接著定義兩個視圖函數(shù),一個調用模板用來注冊用戶,一個用來保存用戶信息并提示注冊成功。

def login(request):
    return render(request, "demo.html")


def save(request):
    user = request.POST.get("user")
    pwd = request.POST.get("password")
    print(f"用戶名:{user},密碼:{pwd}")
    return HttpResponse("注冊成功!")

最后再新增兩個路由

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('save/', views.save)
]

現(xiàn)在就能開始注冊啦!

先運行程序,然后進入http://127.0.0.1:8000/login/

在這里插入圖片描述

輸入完用戶名和密碼后點擊注冊,發(fā)現(xiàn)…被禁用了?

在這里插入圖片描述

csrf_token

為降低安全隱患,django專門為用戶設置了一個防止跨站請求偽造(csrf)的功能——csrf_token。當在表單中用post提交數(shù)據(jù)的時候,django會去檢查是否有一個csrf的隨機字符串,如果沒有就會報錯,也就是剛才出現(xiàn)的頁面。

因此,我們在表單中使用post傳遞數(shù)據(jù)時需要加上{% csrf_token %}這條命令。

我們加上這條命令后重新運行進入注冊網(wǎng)頁,發(fā)現(xiàn)多了一串秘鑰是之前沒有的。

在這里插入圖片描述

再次輸入用戶名與密碼,然后點擊注冊,就能注冊成功了!接著回到pycharm也能夠看到用戶名跟密碼都打印出來了

在這里插入圖片描述

響應

常見的響應形式一般有三種HttpResponse,render,redirect。前面兩種我們已經(jīng)使用過。

 HttpResponse可以返回簡單的字符串

HttpResponse(content=響應體, content_type=響應體數(shù)據(jù)類型, status=狀態(tài)碼)

 render

它的作用是調用模板,并能通過字典向模板傳入數(shù)據(jù)。它有以下屬性:

  • request:用于生成響應的請求對象。必須要寫
  • template_name: 要使用的模板的完整名稱。 也要寫
  • context: 添加到模板上下文的一個字典. 默認是一個空字典. 如果字典中的某個值是可調用的, 視圖將在渲染模板之前調用它.
  • content_type:  生成的文檔要使用的MIME類型. 默認為DEFAULT_CONTENT_TYPE設置的值. 默認為"text/html"
  • status: 響應的狀態(tài)碼. 默認為200

重定向

我單獨把它拎出來呢是因為前面我們沒有講過重定向,因此我要舉個例子說明一下。在上面的用戶注冊系統(tǒng)上稍作修改:我們注冊完用戶信息后不再提示用戶注冊成功,而是直接跳轉到登錄成功后的頁面。

在視圖函數(shù)save中將原先的 return HttpResponse(“注冊成功!”) 改為 return redirect("https://www.baidu.com")。點擊運行后再次進入http://127.0.0.1:8000/login/

輸入完用戶名密碼點擊注冊后就能跳轉啦!

在這里插入圖片描述

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!   

相關文章

最新評論