【Python】【Django】Get和Post方法的應用


摘自:嗶哩嗶哩-Python進階教程之Django框架(PythonWeb框架)(第三期)

一、Get方法實現用戶登錄功能

----------------------------------項目主要結構----------------------------------

 

 

 

1.創建stu應用(Terminal中命令創建:>python manage.py startapp stu)

2.templates文件夾下創建html文件

templates.login.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <script>
 7         function test(){
 8             window.location.href="/student/login/?uname=zhangsan&pwd=123";
 9         }
10     </script>
11 </head>
12 <body>
13     <input type="button" onclick="test()" value="GET請求"/>
14     <a href="/student/login/?uname=lisi&pwd=123">顯示登錄首頁</a>
15     <form action="/student/login/"method="get">
16  {% csrf_token %}#這是一個快標簽,即在html代碼中寫了一個python代碼,添加次條后,表單中會動態生成同服務器端驗證字符串一致的一個字符串,可以導致驗證通過,登錄成功。
17 <p> 18 <label>用戶名:</label><input type="text" name="uname"> 19 </p> 20 <p> 21 <label>&emsp;碼:</label><input type="text" name="pwd"> 22 </p> 23 <p> 24 &emsp;&emsp;&emsp;&emsp;<input type="submit" value="登錄"> 25 </p> 26 27 </form> 28 29 </body> 30 </html>

 

3.項目名.urls.py

1 from django.conf.urls import url, include
2 from django.contrib import admin
3 
4 urlpatterns = [
5     url(r'^admin/', admin.site.urls),
6     url(r'^student/',include('stu.urls'))
7 ]

 

4.項目名.settings.py

1 INSTALLED_APPS = [
2     'django.contrib.admin',
3     'django.contrib.auth',
4     'django.contrib.contenttypes',
5     'django.contrib.sessions',
6     'django.contrib.messages',
7     'django.contrib.staticfiles',
8     'stu' #添加針對登錄模塊創建的app對象
9 ]

5.stu.urls.py

1 #coding=utf-8
2 
3 from django.conf.urls import url
4 import views
5 
6 urlpatterns=[
7     url(r'^$',views.index_view),
8     url(r'^login/',views.login_view) #調用views.py,view.py中有login.html的調用
9 ]

6.stu.views.py

 1 # -*- coding: utf-8 -*-
 2 from __future__ import unicode_literals
 3 
 4 from django.http import HttpResponse
 5 from django.shortcuts import render
 6 
 7 
 8 # Create your views here.
 9 # 渲染登錄首頁
10 def index_view(request):
11     return render(request, 'login.html')
12 
13 
14 # 處理登錄功能
15 def login_view(request):
16     # 接收請求參數
17     uname = request.GET.get('uname', '')
18     print('用戶名為:' + uname)
19     pwd = request.GET.get('pwd', '')
20 
21     print('用戶名為:'+uname)
22 
23     # 判斷
24     if uname == 'zhangsan' and pwd == '123':
25         return HttpResponse('登錄成功!')
26 
27     return HttpResponse('登錄失敗!')

二、POST方法實現登錄功能

1.從get方式改為post方式需要改以下兩個地方:

  1)第一步

    templates.login.html

<form action="/student/login/"method="get"> 

改為:
<form action="/student/login/"method="post">

2)第二步

stu.view.py
uname = request.GET.get('uname', '') pwd = request.GET.get('pwd', '')
改為:
uname = request.POST.get('uname', '') pwd = request.POST.get('pwd', '')

3)第三步
(1)取消setting中的跨站攻擊驗證
僅改這兩處還不夠,運行項目后,進入對應訪問網址:http://127.0.0.1:8000/student 還是會報錯,這是因為python自帶跨站攻擊相關驗證方法,對應方法在下圖settings.py中middleware中的csrf方法,注釋掉此條(不會進行跨站攻擊驗證,不進行服務器端和客戶端對應生成字符串轉換后的匹配<如果服務器端和客戶端用同樣的規則繼續解析匹配,那么會一致,就證明安全,如果不一致,則證明不安全。>),就不會報錯了。(不防止網站被跨站攻擊了)
 

(2)恢復(1)中注釋內容——即取消注釋csrf語句

修改login.html中的代碼:

添加一句:

<form>下方

16  {% csrf_token %}#這是一個快標簽,即在html代碼中寫了一個python代碼,添加次條后,表單中會動態生成同服務器端驗證字符串一致的一個字符串,可以導致驗證通過,在服務器端訪問后,F12,進行登錄用戶操作,可以看到下圖紅框部分為生成的字符串。

 

 

 

 fiddler工具中

 

 

 GET和POST請求都有什么方式?

GET:

1.html form表單中method="get"

2.地址直接訪問

3.html中:<a href>標簽

4.JS中:window.location.href

 

 

 如果訪問報錯可以通過下面方式去調試

 

 

 可能是以下紅框部分沒有修改

 

 

 

POST:

1.html中form中method="post"

 

 

 

😘:get請求同post請求的區別

get的請求參數放在地址欄的后面,請求參數的數據的長度有限制,不安全(地址欄就能看到),有緩存

post的請求參數放在請求的實體內容中,請求參數的數據的長度同服務器(存儲環境)有關,相對安全,沒有緩存

 

😜最安全的是https,http無論get還是post都可以用抓包工具抓到請求參數,所以http不安全。

 老師講課筆記

 


免責聲明!

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



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