Django基础(五)



1.转发与重定向
   1.重定向
       定义:重新向新的访问地址发送请求(服务端)


   2. 语法
       from django.http import HttpResponseRedirect
       return HttpResponseRedirect(url)


2.ORM操作
    更新表中的所有的年龄都增加10岁
    update index_Author set age= age+10


    Author.objects.all().update()
    1. F()操作
       1.作用:
          在执行操作中,获取某列的的值时使用
       2.语法:
          F("列名")
          from django.db.models import F
          Author.objects.all().update(age=F("age")+10)

      3.

  2. Q()操作
       1.作用:
            在查询条件中,可以完成或的操作,用到 Q 就是用  |   
       2.语法:
            from.jango.db.models import Q
            Q(表达式)|Q(表达式) 
            Author.objects.filter(id=1,age=35)
            select * from author where id=1 and age=35

          ex:查询Author实体中,id为6或者age>=76的人


             Author.objects.filter(Q(id=6)|Q(age__gte=70))
             select * from  author where id=6 or age >=70


   3.原生的数据库操作方法
       1.查询的操作
          函数:raw(sql语句)
          语法: Entry.objects.raw(sql)

       2.增删改
          def doSql(request):
            with connection.cursor() as cursor:
               sql = "delete from  author"
               curosr.execute(sql)
               return HttpResponse("...")



3.使用后台管理 Models
    1.后台的配置
      登录地址: http://localhost:8000/admin


     创建后台管理员
      ./manage.py createsuperuser
      Username:输入用户名, 默认为tarena
      Email Address:电子邮件
      Password:密码
      Password(again):重复密码  
   2.基本管理
     
    1.在应用中的admin.py中注册要管理的实体类


      1.admin.py
        作用:注册需要管理的Models,只有在此注册的Models才允许被管理


      2.注册Models
         from.models import *


         admin.site.register(Entry)
         admin.site.register(Entry)


      3.修改models.py 处理显示内容
        1.允许在models.py中为 各个class 追加
           def __str__(self):
             return "sele.name"


        2.通过Models 类的内部类Meta定义每个类的展现形式


            1.class Author(models.Model):
             ....
               class Meta:
                  1. db_table
                      指定该实体类对应到表的名称

                  2.verbose_name
                      定义该实体类,在后台管理的列表页中的名称(单数形式)
                  3. verbose_name_plural
                      效果通过,是复数形式
                  4.ordering
                      指定实体数据列表页中的排序规则,
                      取值可以是列表,默认升序排序,降序需要手动添加负号




      练习:
         1.在后台管理列表页中,每个对象都要展现处他们对应的名称
         2. 更改表名publisher的Meta
1表名为publisher                                                         2.修改其展示名称为出版社


         3.修改Book 的 Meta
            表名为                                                                                        




      2.高级管理


         1.在admin.py中创建高级管理类
             1.定义 EntryAdmin, 继承自admin.ModelAdmin


               ex:   
                   class AuthorAdmin(admin.ModelAdmin):
                     pass


             2.注册高级管理类


                admin.site.register(Entry,EntryAdmin)


                ex:
                  admin.site.register(Author,AuthorAdmin)


         2.定制高级管理信息


             1. list_display
                 作用:指定在列表页中,能够显示的字段们
                 取值:由属性名称组成的元组或者列表
                 ex:
                    list_display = ["name","age","email"]


            2.list_display_links
                 作用:指定在列表页中也能链接到详情页的字段们
                 取值:由属性名称组成的元组或列表
                 注意:取值必须出现在list_display的取值中


            3.list_editable
                 作用:指定在列表页中就允许被编辑的字段们
                 取值:由属性名称组成的元组或列表
                 注意:
                      取值不能出现在list_dispaly_links,
                      但必须出现在list_display中


            4.search_fields
                 作用:添加允许被搜索的字段们
                 取值:由属性名称组成的元组或列表


            5.list_filter
                 作用:在列表的右侧增加过滤器实现快速过滤
                 取值:由属性名称组成的元素或列表


            6.date_hierachy
                作用:在列表页的顶端增加一个时间选择器
                取值:必须是DateField或者DateTimeField的值




            7.fields
               作用:
                   在详情页面中,指定显示那些字段并按照什么样的顺序显示
               取值:由属性名称组成的元组




            8.fieldsets
               作用:
                  在详情页中,对字段们进行分组显示
               注意:fieldsets 与 fields 不能共存的
               语法:
                  fieldsets = (
                     #分组1,
                     ('分组名称',{
                        'fields':("属性2","属性2")
                        'classes':('collapse',),
                     }


                     )
                     #分组2,
                     ('分组名称2',{
                        'fields':("属性1")
                     })
                  )




          练习:
            为publisher增加高级管理功能
            1.在列表中显示
               name,address, city,website属性
            2,address 和 city 是可编辑的
            3. 右侧增加过滤器,允许按照address 和city进行筛选
            4. 分组显示
                name,address,city为基本选项
                country,website为可选项并可以折叠




4.关系映射
   1 - 1  映射
      1.A表中的一条记录只能对B表中的一条记录相关联
      典型代表:一夫多妻制
      数据库中实现:
          A表:设置主键
          B表:增加一列,并引用自A表的主键,还得增加外键.


      2.语法:
         在关联的两个类中任何一个类中,增加:
         一个属性 = models.OneToOneField(Entry)


      3.查询
         class wife(models.Model):
            .....
            author = models.OneToOneField(Author,null=True)

         正向查询:  通过wife找author
              #1.获取 id 为1 的 wife的信息
               wife = Wife.objects.get(id=1)
              #2.通过wife 的关联属性author 来找Author
                 author = wife.author


         反向查询:   通过author 找 wife 
             1.获取id 为 7 的 Author的信息
                author = Author.objects.get(id=7)
             2.在通过author的关联属性wife的来找wife
                author.wife(小写)
                wife 是Django通过OneToOneField在Author中默认增加一个
                的一个隐式属性
             
   1 - 多 映射
      
   多- 多 映射

你可能感兴趣的:(Django基础)