Django初識二
1,在django中用於提交的form表單中的三要素:
1.1>form標籤要有action和method,上傳檔案需要額外指定的enctype
1.2>獲取使用者輸入的標籤要有name屬性(用於提交資料的時候作為鍵)
1.3>必須要有submit按鈕(要不然提交資料沒法放到URL中)
2,Django基礎必會三件套
form django.shortcuts import GttpsRespose(返回一個字串), render(開啟一個html檔案,讀取出來以後傳送給瀏覽器), redirect(跳轉頁面,是跳轉到一個可執行函式,再有函式的返回值,去返回一個html頁面)
2.1>HttpResponse("ok") -->把字串的ok轉化成二進位制的bytes形式,然後按照HTTP響應的格式要求返回
2.2>render(request, "login.html") -->開啟檔案,以二進位制的方式讀取內容,按照響應格式返回
2.3>render(request, "login.html", {"key":"value"}) -->開啟檔案,讀取內容(讀出來是字串,然後把"key"用"value"替換,按照響應格式返回瀏覽器)
2.4>redirect("/index/") -->在同網站不同地址間跳轉(返回的是重定向的響應)
2.5>redirect("https://www.baidu.com") -->讓瀏覽器訪問指定的網址
3,request:所有和請求相關的資料都封裝在這個request物件中
3.1>request.method -->當前這次請求的方法(GET/POST)
3.2>request.GET -->取到URL裡面攜帶的引數
3.3>request.POST -->取到POST提交的資料(form表單提交的資料)
4,模板語言 (HTML中農的特殊符號)
{{ name }} {{ "name":"悶騷哥" }}
5,APP(專案中的一個包)
5.1>Django中建立app:
python manage.py startapp app,名
52>註冊到Django中:
settings.py中的INSTALL_APPS = ["app名"]
6,圖書管理系統之出版社的增刪改查
6.1>表的結構設計
6.1.1>出版社: id name
6.1.2>作者:id name
6.1.3>書: id title 出版社_id
6.1.4>作者 _書_關係表: id書_id 作者_id
7,ORM的語句
7.1>類名.objects.all() -->返回的是這個類的所有的物件 放在一個列表裡
7.2>類名.objects.filter() -->返回的是一個符合條件的物件列表
7.3>類名.objects.get() -->返回的是一個物件,如果沒有,或者多個 符合條件的物件,都會報錯
7.4>類名.objects.create(name="剛剛獲得的條件") -->建立一個物件,返回的就是剛剛建立的那個物件
7.5>類名.objects.filter(id=).delete.() -->刪除物件
7.6>obj=類名.objects.get(id="") -->獲取要修改的物件(根據id值)
obj.name = "修改的新值" -- 修改物件的屬性(修改某行資料某個欄位的值) obj.save() -->把修改的資料同步到資料庫
8,Django模板語言
8.1>for迴圈
{% for i in ret %}-------------------------->應用for迴圈一般是拿到的是一個物件的列表
{{ forloop.counter }} -------------->for迴圈從1開始計數
{{ forloop.counter0 }} --------------->for迴圈從0開始計數
{{% endfor %}} ------------------------>結束否迴圈的語句
9,登入函式的示例程式碼:
# views業務邏輯程式碼 from app01.models import UserInfo # 把資料庫匯入進來 def login(request): # 定義一個全域性變數當第一次進來獲取頁面的時候,不顯示html變數的資訊 error_msg = "" if request.method == "POST": # 1, 第二次進來的時候是POST請求要獲取使用者輸入的使用者名稱和密碼 new_email = request.POST.get("email") new_pwd = request.POST.get("pwd") # 2, 從資料庫中讀取資料並校驗使用者輸入的是否合法 ret_obj = UserInfo.objects.filter(email= new_email, pwd= new_pwd) # 判斷匹配是否成功 if ret_obj: # 此時如果匹配成功,得到的是匹配的物件 # 如果匹配成功,就說明存在該使用者,讓使用者執行可執行得到操作頁面 return redirect("/index/") # 跳轉到index這個頁面,同網站跳轉用絕對路徑 # 假如沒有匹配成功就要給用於提示頁面 error_msg = "郵箱或者密碼不正確 " # 3, 如果是第一次進來,使用者需要獲得一個登入頁面,這時是一個get請求 return render(request, "login.html", {"error_msg":error_msg}) def index(reuest): return render(request, "index.html", {"error_msg":error_msg})
10,出版社的增刪改查
# 檢視所有的出版社列表 def press_list(request): # 讀取資料庫中的資料 press_data = Press.objects.all() # 返回出版社頁面 return render(request, "press_list.html", {"press_data":press_data }) def add_press(request): # 2 ,第二次進來是POST請求時使用者提交資訊的時候 if request.method == "POST": # 獲取使用者輸入的資訊 new_press_name = request.POST.get("name") # 把獲取到的資訊更新的到資料庫中 Press.objects.create(name=new_press_name) # 給使用者展示新增以後的頁面 return redirect("/press_list/") #1 第一次進來是get請求,需要返回給使用者一個增加的頁面 return render(request, "add_press.html") def delete_press(request): # 1 獲取到使用者選擇刪除的id值 delete_id = request.GET.get("id") # 2找到要刪除的物件並且刪除 Press.objects.filter(id=delete_id).delete() # 3 向用戶展示刪除以後額結果 return redirect("/press_list/") def edit_press(request): # 1 獲取使用者要刪除的出版社id edit_id = request.GET.get("id") # 2 獲取該id值的對應的物件 edit_obj = Press.objectes.get(id= edit_id) # 3 第二次進來是POST請求,這次是使用者提交修改過後的資料 if request.method == "POST": # 獲取使用者輸入的出版社名稱 edit_press_name = request.POST.get("name") # 更新到資料庫中 edit_obj.name = edit_press_name # 寫到資料庫中要save()重新整理一下 edit_obj.save() # 給使用者展示刪除後的出版社清單 return redirect("/press_list/") # 2第一次進來的時候是GET請求,給使用者編輯的頁面 # 需要先從資料庫中獲取到被點選刪除的出版社名稱 press_name = edot _obj.name return render(request, "edit_press.html", {"press_data":press_name})