1. 程式人生 > >Python Web 框架-Django day04

Python Web 框架-Django day04

day03

1.模板的繼承     1.父模板         {% block 名稱 %}         {% endblock %}     2.子模板         1.指定繼承模板             {% extends '父模板名稱' %}         2.編寫要覆蓋的內容             {% block 名稱 %}             {% endblock %} 2.url() 的name屬性 - 反向解析     1.為 url 的name屬性賦值         url(r'',views,name='名稱')         1.模板中反向解析             {% url 'name值' '引數1' '引數3' %}         2.檢視中反向解析             url=reverse('name值',args=('引數1','引數2')) 3.建立模型     class ClassName(models.Model):         屬性名=models.欄位型別(欄位選項)

        欄位型別:             1.CharField(max_length=50)             2.IntegerField()             3.FloatField()             4.DecimalField(max_digits=7,decimal_places=2)             5.EmailField()             6.URLField()             7.ImageField()             8.DateField()             9.DateTimeField()             10.BooleanField()         欄位選項:             1.default             2.null             3.db_column 4.相關指令     1.版本切換         ./manage.py migrate 應用名稱 版本號     2.通過資料庫自動匯出models類         ./manage.py inspectdb > 檔名.py

1模型中的CRUD

  1. 增加資料
    1. Entry.objects.create(屬性=值,屬性=值) 返回值:建立好的實體物件
    2. 建立一個Entry 物件,並通過 save() 進行儲存 obj = Entry(屬性=值,屬性=值) obj.屬性 = 值 obj.save() 無返回值,儲存成功後,obj 會被重新賦值
    3. 使用字典建立物件,並通過 save() 進行儲存 dic = {   '屬性1':'值1',   '屬性2':'值2', } obj = Entry(**dic) obj.save() 練習: 使用插入資料的三種實現方式,分別向Book,Publisher 三個實體表中各增加三條資料
  2. 查詢資料(重難點) 通過 Entry.objects 呼叫查詢介面函式 ex:   Entry.objects.filter()   Entry.objects.exclude() 所有的查詢介面函式,都可以通過一個query 屬性來得到對應的sql語句   Entry.objects.filter().query
    1. 基本查詢操作 語法:all() 用法:Entry.objects.all() 返回:QuerySet(查詢結果集,是一個封裝了若干物件的列表)
    2. 查詢返回指定列 語法:values() | values('列1','列2',...) 作用:查詢一個QuerySet中的部分列,並封裝成字典,再放到列表中 用法:   Entry.object.values()   Entry.object.values('列1','列2')  也允許將values() 放在其他返回查詢結果集的方法的後面   Entry.objects.all().values()   Entry.objects.filter.values()
    3. 查詢返回指定列 語法:values_list() 作用:將結果封裝到元組中再封裝到列表中 用法:同values 練習: 效果:查詢Author表中所有的資料顯示在網頁上 姓名          年齡          郵箱          操作 王老師       32           [email protected]   刪除 修改
    4. 只查詢一條資料 語法:get(條件) 作用:查詢只返回一條資料 用法:Entry.objects.get(條件) 注意:   該方法只能查詢一條資料   查詢多於一條資料或沒查詢出結果的話那麼都會拋異常
    5. 根據條件查詢部分行資料 語法:filter(條件) 用法:Entry.objects.filter(條件) ex:
      1. 想查詢id為1的Author的資訊 Author.objects.filter(id=1)
      2. 想查id為1,並且name為隔壁老王的資訊 Author.objects.filter(id=1,name='隔壁老王') 注意:
        1. 多條件,用,隔開即可
        2. 用,隔開的條件,對映到sql中是用 and 來連線的
      3. 想查詢age 大於等於 30 的 author 的資訊 Author.objects.filter(age>=30) #錯誤 在條件查詢中,Django提供了若干查詢謂詞(Field Looups),可以完成非等值條件的查詢   Entry.objects.filter(屬性_查詢謂詞=值) 所有支援條件查詢的位置處都支援查詢謂詞:   filter(),get(),exclude() 練習:
        1. 查詢出age大於等於30的Author的資訊 authors = Authors.objects.filter(age__gte=30)
        2. 查詢出所有姓‘王’的Author的資訊 authors = Authors.objects.filter(name__startswith='王')
        3. 查詢出所有email中包含‘wang’的Author的資訊 authors = Authors.objects.filter(emial__contains='wang')
    6. 對條件取反 語法:exclude(條件) 用法:Entry.objects.exclude(條件) ex:   Author.objects.exclude(id=1)   select * from index_author where not(id=1)   Author.objects.exclude(id=1,age__lt=30)   select * from index_author where not (id=1 and age < 30)
    7. 聚合查詢(不帶分組) 語法:aggregate() 語法:   Entry.objects.all().aggregate(名=聚合函式('列')) ex:   Author.objects.all().aggregate(avg=Avg('age')) 聚合函式:
      1. Avg():平均值
      2. Count():數量
      3. Sum():求和
      4. Min():最小值
      5. Max():最大值
    8. 聚合查詢(帶分組) 語法:annotate() 用法:Entry.objects.all().values('列1','列2').annotate(列=聚合函式()).values('列1','列2')  ex:   result = Author.objects.values('isActive').annotate(sum=Sum('age')).all()
    9. 排序查詢 語法:order_by() 用法:Entry.objects.order_by('列1','-列2')   預設是升序排序,列名前加 - 則表示降序排序
  3. 修改
    1. 修改單個實體
      1. 查 通過get() 得到要修改的實體物件 ex:   au = Author.objects.get(id=2)
      2. 改 通過物件的屬性修改物件的值 ex:   au.age = 38   au.email = '[email protected]'   au.isActive = False
      3. 儲存 通過物件的save() 儲存回資料庫 ex:   au.save()
    2. 批量修改資料 呼叫QuerySet 的 update(屬性=值,屬性=值)實現批量修改 ex:   Author.objects.filter(isActive=False).update(isActive=True)
  4. 刪除 呼叫實體物件/查詢結果集的 delete() 完成刪除
    1. 刪除單個物件 au = Author.objects.get(id=1) au.delete
    2. 刪除多個物件 ex:刪除Author 表中isActive的值為False的所有資料 auList = Author.objects.filter(isActive=False) auList.delete

示例 請點選

kxdi