前面也寫了關於視圖,模型,模塊,地址之間的簡單邏輯關係,也每一個都舉了說明了。一般見到最多的web頁面都會有登陸,今天咱們先經過前面學到的內容,簡單的寫一個登陸頁面html
在咱們測試的時候也首先要了解到需求,這裏咱們先明確一個需求。進入到一個登陸頁面輸入正確的帳號密碼,直接跳轉到安靜博客頁面,若是帳號密碼錯誤,就在登陸頁面報錯提示帳號密碼失敗。需求很簡單,可是也首先要有思路。前端
一、首先在寫一個登陸的前端頁面。web
二、判斷輸入的帳號名是否正確數據庫
三、帳號名正確的話直接跳轉到安靜博客頁面django
四、帳號名錯誤的話提示帳號密碼錯誤後端
話很少說,咱們思路弄明白了,能夠開始寫了post
利用上次咱們寫的那個簡單的登陸頁面(安靜沒有寫過前端,都是東湊湊,西拼拼,先這樣看着~~)測試
注意:優化
一、這裏咱們用戶名和密碼必須後面有name='xxx'參數,進行返回給後端;url
二、 <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個之間有什麼區別嗎?
一、 HttpResponse的應用場景:返回一個指定的字符串
二、render的應用場景:返回一個HTML文件
三、 redirect的應用場景:跳轉到指定的頁面