1. 程式人生 > >Django初識二

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})