1. 程式人生 > 實用技巧 >SpringBoot對靜態資源的對映規則

SpringBoot對靜態資源的對映規則

ORM操作

基本查詢:

book = BookInfo.objects.get(btitle='⻄遊記')       #單⼀查詢,如果結果不存在報錯
book = BookInfo.objects.all(btitle='⻄遊記')     #查詢多個結果,有多少返回多少,不存在返回None
book = BookInfo.objects.filter(btitle='⻄遊記').count()  #查詢結果的數量
book = BookInfo.objects.exclude(btitle='⻄遊記')    #查詢結果取反

模糊查詢:

contains 是否包含

book = BookInfo.objects.filter(btitle__contains='
')   #查詢結果包含‘記’ %記% 

startswith,endswith 以指定值開頭或結尾

book = BookInfo.objects.filter(btitle__startswith='')   #查詢以‘⻄’開頭的 ⻄%
book = BookInfo.objects.filter(btitle__endswith='')   #查詢以‘記’結尾的 %記

空查詢:

isnull  是否為空

range 相當於between...and...

book = BookInfo.object.filter(id__in = [1,5,13,24])    #查詢id為1或5或13或24
book 
= BookInfo.object.filter(id__range = [10,20])    #查詢範圍為10-20的id

⽐較查詢:

  gt      ⼤於

  gte     ⼤於等於

  lt      ⼩於

  lte     ⼩於等於

  exclude  不等於

book = BookInfo.object.filter(id__gt =10)  #查詢id⼤於10的

book = BookInfo.object.exclude(id = 10) #查詢id不等於的10的

F物件和Q物件

⽐較兩個欄位物件之間的關係⽤F物件。(F物件可以進⾏運算)

book = BookInfio.Object.filter(bread__gte=F('
bcomment'))  #查詢閱讀量等 於評論量的物件 book = BookInfio.Object.filter(bread__gte=F('bcomment') * 2 )

與邏輯運算子連⽤使⽤Q物件。 或( | ) 與( & )  ⾮( ~ )

book = BookInfo.Object.filter(Q(bread__gte=20) | Q(pk__lt=3))  #查詢閱讀量為20或者id為3的物件

聚合函式

  使⽤aggregate()過濾器調⽤聚合函式。聚合函式包括:Avg 平均,Count 數量,Max 最⼤,Min 最⼩,Sum 求和

book = BookInfo.Object.aggregate(Sum('bread'))  #求閱讀量的和

排序

  使⽤order_by對結果進⾏排序

book=BookInfo.object.all().order_by('bread')    #按閱讀量的升序排列
book=BookInfo.object.all().order_by('-bread')    #按閱讀量的降序排列

關聯查詢

  

    ⼀對多模型

    ⼀到多的訪問語法:⼀對應的模型類物件.多對應的模型類名⼩寫_set

b = BookInfo.object.filter(id = 1) 

b.heroinfo_set.all()      #查詢book_id = 1的書⾥的所有英雄

  (⼀本書⾥有多個英雄,⼀個英雄只能存在⼀本書⾥。表關係為⼀對多,英雄表⾥外來鍵關聯書

  id,英雄表⾥的存放多個書id。英雄表為多,書表為⼀。)

  多到⼀的訪問語法:多對應的模型類物件.多對應的模型類中的關係類屬性名

h = HeroInfo.object.filter(id = 1)

h.hbook          #查詢英雄id = 1的書是哪本。

  ⽅向查詢除了可以使⽤模型類名_set,還有⼀種是在建⽴模型類的時候使⽤related_name來指定變數名。

hbook=model.ForeignKey(HeroInfo,on_delete=model.CACADE,null=Ture,related_name='heros')

b.herose.all()

多對多操作

  增加

class ManyToManyTest(APIView):
     def post(self, request):
     # ⽅法⼀:在建⽴manytomany的models⾥新增資料,(⼀條,⼀個物件)
     # teacherobj = models.Teacher.objects.filter(id=1).first()
     # studentobj = models.Student.objects.filter(id=2).first()
     # teacherobj.stu.add(studentobj)
     # return Response({
     # "status": 200
     # })
     #⽅法⼆:在未建⽴manytomany的models⾥新增資料,(⼀條,⼀個物件)
     teacherobj = models.Teacher.objects.all()
     studentobj = models.Student.objects.filter(id=2).first()
     studentobj.teacher_set.add(*teacherobj)
     return Response({
         "status": 200
      })

刪除

class ManyToManyTest(APIView):
     def delete(self, request):
     # ⽅法⼀:在建⽴manytomany的models⾥刪除資料,(⼀條,⼀個物件)
     # teacherobj = models.Teacher.objects.filter(id=1).first()
     # studentobj = models.Student.objects.filter(id=2).first()
     # teacherobj.stu.remove(studentobj)
     # return Response({
     # "status": 200
     # })
     #⽅法⼆:在未建⽴manytomany的models⾥刪除資料,(多條,可迭代物件)
     teacherobj = models.Teacher.objects.all()
     studentobj = models.Student.objects.filter(id=2).first()
     studentobj.teacher_set.remove(*teacherobj)
     return Response({
     "status": 200
     })

修改

class ManyToManyTest(APIView):
     def put(self, request):
     # ⽅法⼀:在建⽴manytomany的models⾥修改資料,引數只能是可迭代物件
     teacherobj = models.Teacher.objects.filter(id=3).first()
     studentobj = models.Student.objects.filter(id=2)
     teacherobj.stu.set(studentobj)
     return Response({
     "status": 200
     })
     #⽅法⼆:在未建⽴manytomany的models⾥修改資料,引數只能是可迭代物件
     # teacherobj = models.Teacher.objects.all()
     # studentobj = models.Student.objects.filter(id=2).first()
     # studentobj.teacher_set.set(*teacherobj)
     # return Response({
     # "status": 200
     # })

檢視

class ManyToManyTest(APIView):
     def get(self, request):
     # ⽅法⼀:在建⽴manytomany的models⾥查資料
     # teacherobj = models.Teacher.objects.get(id=2)
     # data = teacherobj.stu.all()
     # data_list = []
     # for i in data:
     # data_dic={
     # "student_name":i.name,
     # "teacher_name":teacherobj.name
     # }
     # data_list.append(data_dic)
     # return Response(data_list)
     # ⽅法⼆:在未建⽴manytomany的models⾥查資料
     studentobj = models.Student.objects.get(id=2)
     data = studentobj.teacher_set.all()
     data_list = []
     for i in data:
     data_dic = {
     "student_name": studentobj.name,
     "teacher_name": i.name
     }
     data_list.append(data_dic)
     return Response(data_list)