<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上一章節中我們講了如何參照靜態檔案和模板,以及如何使用常見的Django命令等。那麼這章我們就來聊聊Django是如何向瀏覽器傳送資料,以及我們怎麼來接收瀏覽器返回的資料的。
在我們的檢視函數中,每一個函數都有一個request引數,那麼這個request是什麼呢?request是一個物件,封裝了使用者通過瀏覽器或爬蟲等傳送過來的所有請求相關的資料。 注意,這裡的 request 並不是 python requests模組裡面的。
GET與POST都是一種請求方式,一般我們在瀏覽器輸入一個網址存取網站都是GET請求;在FORM表單中,可以通過設定Method指定提交方式為GET或者POST提交方式,其預設是GET提交方式。它們之間最直觀的區別就是GET把引數包含在URL中;POST通過request body傳遞引數,它不會作為url的一部分,不會被快取、儲存在伺服器紀錄檔、以及瀏覽器瀏覽記錄中。(一個看得到,一個看不到)
request 有一個專門用來檢視使用者的請求方式的方法——method。現在就來驗證下吧! 我以上次的test函數為例,新增 print(request.method)
語句, 它對應的網頁路徑是/hd
那麼我們點選執行後存取 http://127.0.0.1:8000/hd/
再回到我們的pycharm就能看到存取網頁使用的請求方式了,果然是get請求
另外,我們能夠通過request.GET獲取網頁上url傳遞過來的引數。怎麼傳遞引數呢?在url後面輸入“ ?”,然後就能輸入引數了,多個引數用&連線。
還是以剛才的 http://127.0.0.1:8000/hd/ 為例,在後面輸入?a=5&b=3變成
http://127.0.0.1:8000/hd/?a=5&b=3,最後在檢視函數test使用request.GET(GET必須大寫)方法接收,並列印結果。
說完GET請求咱們再來結合例子說明一下POST請求。POST請求經常出現在表單中,使用時需要用method指定。我們模擬一個非常簡單的使用者註冊介面:當我們輸入完使用者名稱和密碼後,希望用兩個變數接收它,方便以後儲存到資料庫。
先製作一個簡單的HTML頁面。當我們提交表單資料後,跳轉至/save/頁面進行儲存
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>使用者註冊</title> </head> <body> <h1>使用者註冊系統</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>
接著定義兩個檢視函數,一個呼叫模板用來註冊使用者,一個用來儲存使用者資訊並提示註冊成功。
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) ]
現在就能開始註冊啦!
先執行程式,然後進入http://127.0.0.1:8000/login/
輸入完使用者名稱和密碼後點選註冊,發現…被禁用了?
為降低安全隱患,django專門為使用者設定了一個防止跨站請求偽造(csrf)的功能——csrf_token。當在表單中用post提交資料的時候,django會去檢查是否有一個csrf的隨機字串,如果沒有就會報錯,也就是剛才出現的頁面。
因此,我們在表單中使用post傳遞資料時需要加上{% csrf_token %}
這條命令。
我們加上這條命令後重新執行進入註冊網頁,發現多了一串祕鑰是之前沒有的。
再次輸入使用者名稱與密碼,然後點選註冊,就能註冊成功了!接著回到pycharm也能夠看到使用者名稱跟密碼都列印出來了
常見的響應形式一般有三種HttpResponse,render,redirect。前面兩種我們已經使用過。
HttpResponse可以返回簡單的字串
HttpResponse(content=響應體, content_type=響應體資料型別, status=狀態碼)
render
它的作用是呼叫模板,並能通過字典向模板傳入資料。它有以下屬性:
重定向
我單獨把它拎出來呢是因為前面我們沒有講過重定向,因此我要舉個例子說明一下。在上面的使用者註冊系統上稍作修改:我們註冊完使用者資訊後不再提示使用者註冊成功,而是直接跳轉到登入成功後的頁面。
在檢視函數save中將原先的 return HttpResponse(“註冊成功!”) 改為 return redirect("https://www.baidu.com")
。點選執行後再次進入http://127.0.0.1:8000/login/
輸入完使用者名稱密碼點選註冊後就能跳轉啦!
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45