網站首頁 編程語言 正文
前言
上一章節中我們講了如何引用靜態文件和模板,以及如何使用常見的Django命令等。那么這章我們就來聊聊Django是如何向瀏覽器發送數據,以及我們怎么來接收瀏覽器返回的數據的。
請求
什么是request
在我們的視圖函數中,每一個函數都有一個request參數,那么這個request是什么呢?request是一個對象,封裝了用戶通過瀏覽器或爬蟲等發送過來的所有請求相關的數據。?注意,這里的 request 并不是 python requests模塊里面的。
GET與POST
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/
輸入完用戶名和密碼后點擊注冊,發現…被禁用了?
csrf_token
為降低安全隱患,django專門為用戶設置了一個防止跨站請求偽造(csrf)的功能——csrf_token。當在表單中用post提交數據的時候,django會去檢查是否有一個csrf的隨機字符串,如果沒有就會報錯,也就是剛才出現的頁面。
因此,我們在表單中使用post傳遞數據時需要加上{% csrf_token %}
這條命令。
我們加上這條命令后重新運行進入注冊網頁,發現多了一串秘鑰是之前沒有的。
再次輸入用戶名與密碼,然后點擊注冊,就能注冊成功了!接著回到pycharm也能夠看到用戶名跟密碼都打印出來了
響應
常見的響應形式一般有三種HttpResponse,render,redirect。前面兩種我們已經使用過。
?HttpResponse可以返回簡單的字符串
HttpResponse(content=響應體, content_type=響應體數據類型, status=狀態碼)
?render
它的作用是調用模板,并能通過字典向模板傳入數據。它有以下屬性:
- request:用于生成響應的請求對象。必須要寫
- template_name: 要使用的模板的完整名稱。 也要寫
- context: 添加到模板上下文的一個字典. 默認是一個空字典. 如果字典中的某個值是可調用的, 視圖將在渲染模板之前調用它.
- content_type: 生成的文檔要使用的MIME類型. 默認為DEFAULT_CONTENT_TYPE設置的值. 默認為"text/html"
- status: 響應的狀態碼. 默認為200
重定向
我單獨把它拎出來呢是因為前面我們沒有講過重定向,因此我要舉個例子說明一下。在上面的用戶注冊系統上稍作修改:我們注冊完用戶信息后不再提示用戶注冊成功,而是直接跳轉到登錄成功后的頁面。
在視圖函數save中將原先的 return HttpResponse(“注冊成功!”) 改為?return redirect("https://www.baidu.com")
。點擊運行后再次進入http://127.0.0.1:8000/login/
輸入完用戶名密碼點擊注冊后就能跳轉啦!
總結
原文鏈接:https://blog.csdn.net/lishuaigell/article/details/122877699
相關推薦
- 2023-01-30 react-router-dom?降低版本的兩種方法詳解_React
- 2023-03-29 Redis內存碎片原理深入分析_Redis
- 2022-07-11 Mongodb分片技術理論
- 2022-05-10 MAC m1使用homebrew安裝redis報錯
- 2023-10-11 在MyBatisPlus中添加分頁插件
- 2023-01-14 GoLang日志監控系統實現_Golang
- 2022-04-07 C++?string與int的相互轉換(使用C++11)_C 語言
- 2022-05-25 Python小游戲實現實例之接蘋果_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支