前面也寫了關於視圖,模型,模塊,地址之間的簡單邏輯關系,也每個都舉了說明了。通常見到最多的web頁面都會有登錄,今天我們先通過前面學到的內容,簡單的寫一個登錄頁面
需求文檔
在我們測試的時候也首先要了解到需求,這里我們先明確一個需求。進入到一個登錄頁面輸入正確的賬號密碼,直接跳轉到安靜博客頁面,如果賬號密碼錯誤,就在登錄頁面報錯提示賬號密碼失敗。需求很簡單,但是也首先要有思路。
思路
1、首先在寫一個登錄的前端頁面。
2、判斷輸入的賬號名是否正確
3、賬號名正確的話直接跳轉到安靜博客頁面
4、賬號名錯誤的話提示賬號密碼錯誤
小試牛刀
話不多說,我們思路弄明白了,可以開始寫了
登錄頁面
利用上次我們寫的那個簡單的登錄頁面(安靜沒有寫過前端,都是東湊湊,西拼拼,先這樣看着~~)
注意:
1、這里我們用戶名和密碼必須后面有name='xxx'參數,進行返回給后端;
2、 <form action="/login2/" method="post"> 我們這里返回的頁面為當前頁面,如果密碼錯誤的話,也停留在這個頁面,請求方式為POST
login2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首頁</title> </head> <body> <h1> <p style="text-align:center" font size="2">歡迎來到安靜的博客:</p> </h1> <h1> <p style="text-align:center">請輸出賬號密碼:</p> </h1> <form action="/login2/" method="post"> {% csrf_token %} <p style="text-align:center">用戶:<input type="text" name="username" /><br /> </p> <p style="text-align:center">密碼:<input type="password" name="password" /><br /> <input type="submit" value="登錄" /> </form> </body> </html>
判斷賬號密碼正確與錯誤
這里沒有添加數據庫,就直接先把賬號密碼寫死了。(后續繼續優化)
view.py
# 導入redirect模塊,直接請求頁面 from django.shortcuts import render,redirect def login2(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # 判斷賬號密碼 if username == 'Anjing' and password == '1234': # 正確后返回到安靜博客頁面,也可以返回到指定頁面 return redirect('https://www.cnblogs.com/qican/') else: #密碼錯誤先不寫 pass return render(request,'login2.html')
編寫url對應關系
urls.py from django.urls import path from Anjing import views # 完成對應關系 urlpatterns = [ path('login2/', views.login2), ]
直接啟動Django調試登錄成功效果
可以看到輸入賬號密碼正確后,直接跳轉到了安靜的博客,然后如果登錄失敗的話,繼續停留在這個頁面。
需求已經就只剩下一個賬號密碼錯誤,返回提示了,這個怎么弄呢?思考前面的內容,返回前端數據,我們可以在html中定義一個參數項,然后報錯直接返回
添加報錯參數
其中 <p style="color: red;text-align: center">{{ error_msg }}</p> 表示展現錯誤內容
其中Django模板語言格式: {{ 變量名 }}
login2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首頁</title> </head> <body> <h1> <p style="text-align:center" font size="2">歡迎來到安靜的博客:</p> </h1> <h1> <p style="text-align:center">請輸出賬號密碼:</p> </h1> <form action="/login2/" method="post"> {% csrf_token %} <p style="text-align:center">用戶:<input type="text" name="username" /><br /> </p> <p style="text-align:center">密碼:<input type="password" name="password" /><br /> <input type="submit" value="登錄" /> <p style="color: red;text-align: center">{{ error_msg }}</p> </form> </body> </html>
視圖中也需要添加錯誤內容
views.py from django.shortcuts import render,redirect def login2(request): # 定義一個錯誤為空 error_msg = '' if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # 判斷賬號密碼 if username == 'Anjing' and password == '1234': # 正確后返回到安靜博客頁面,也可以返回到指定頁面 return redirect('https://www.cnblogs.com/qican/') else: # 如果賬號密碼錯誤直接報錯 error_msg = '用戶名或密碼錯誤,請重新輸入' return render(request,'login2.html',{'error_msg':error_msg})
重新啟動Django,查看登錄失敗效果
寫到這里會發現,我們的需求已經全部完成了。
新知識
這里引入了一個新的知識點就是redirect模塊,前面我們還用到了HttpResponse,render。那么這3個之間有什么區別嗎?
1、 HttpResponse的應用場景:返回一個指定的字符串
2、render的應用場景:返回一個HTML文件
3、 redirect的應用場景:跳轉到指定的頁面