模板和单表操作

1、模板导入--->写了一个好看的组件,可以复用

  1、写一个模板

  2、在模板中:{% include '模板的名字'%}

2、模板的继承

  1、写一个母版,留一个可扩展的区域(盒子),可以留多个盒子(留的越多,可扩展性越高)

    {%block 名字%}

      可以写内容

    {%endblock%}

  2 在子模板中使用:

     {%block 名字%}

           子模板的内容

     {%endblock 名字%}

3 静态文件相关

   1 写死静态文件:<link rel="stylesheet" href="/static/css/mycss.css"> 、

   2 使用 static标签函数:

         -{%load static%}

     static返回值,会拼上传参的路径  

         -{% static "传参"%}

   3 使用get_static_prefix 标签

     -{%load static%}

          get_static_prefix返回值是:静态文件的地址,相当于/static/

    --{% get_static_prefix %}css/mycss.css

4 单表操作;

   -数据迁移命令:

     -python3 manage.py makemigrations --->只是对变化做一个记录,记录文件在app的migrations

     -python3 manage.py migrate ---->把更改提交到数据库

     -python3 manage.py showmigrations ---->查看那个没有提交到数据库

  -查询api

   <1> all():           查询所有结果

   <2> filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

   <3> get(**kwargs):        返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

   <4> exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象

   <5> order_by(*field):   对查询结果排序('-id')

   <6> reverse():       对查询结果反向排序

   <8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。

   <9> first(): 返回第一条记录

   <10> last(): 返回最后一条记录

   <11> exists(): 如果QuerySet包含数据,就返回True,否则返回False

   <12> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

     <13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

   <14> distinct(): 从返回结果中剔除重复纪录

  -基于双下划线的模糊查询    
    Book.objects.filter(price__in=[100,200,300])
    Book.objects.filter(price__gt=100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    Book.objects.filter(price__range=[100,200])
    Book.objects.filter(title__contains="python")
    Book.objects.filter(title__icontains="python")
    Book.objects.filter(title__startswith="py")
    Book.objects.filter(pub_date__year=2012)
import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day76orm.settings") 默认的setting是谁就传哪个
    import django

    django.setup() 起动Django

    from app01 import models
     ****************新增*********插入数据的两种方式
     方式一 :返回结果是一个对象
     book=models.Book.objects.create(name='红楼梦',price=23.8,publish='人民出版社',author='曹雪芹',create_data='2018-09-17')
     print(book.name)
     方式二:先实例化产生对象,然后调用save方法,保存
     book=models.Book(name='水浒传',price=99.8,publish='老男孩出版社',author='施耐庵',create_data='2018-08-08')
     book.save()
     print(book.name)
     时间格式,可以传字符串,可以传日期格式
     import datetime
         ctime = datetime.datetime.now()
     book = models.Book.objects.create(name='西游记', price=73.8, publish='北京出版社', author='吴承恩', create_data=ctime)
     print(book.name)
     删除******************
     删除名字叫西游记的这本书
     ret=models.Book.objects.filter(name='西游记').delete()
     print(ret)
     删除的第二种方式:
     ret = models.Book.objects.filter(name='西游记').first()
     ret.delete()
     **************修改
     ret=models.Book.objects.filter(name='西游记').update(price=20.9)
     对象修改(没有update方法,但是可以用save来修改)
     book = models.Book.objects.filter(name='西游记').first()
     book.price=89
     book.save()
     查询************************重点************************
     (1)all()
     ret=models.Book.objects.all()
     print(ret)
     filter()
     查询名字叫西游记的这本书
     ret=models.Book.objects.filter(name='西游记').first()
     不支持负数,只支持正数
     ret=models.Book.objects.filter(name='西游记')[-1]
     print(ret)
     filter内可以传多个参数,用逗号分隔,他们之间是and的关系
     ret=models.Book.objects.filter(name='西游记',price='73.8')
      ret.query -->queryset对象打印sql
     print(ret.query)
    get() 有且只有一个结果,才能用,如果有一个,返回的是对象,不是queryset对象,通常用在,用id查询的情况
     ret=models.Book.objects.get(name='红楼梦')
     ret=models.Book.objects.get(id=1)
     print(type(ret))
         exclude()查询名字不叫西游记的书,结果也是queryset对象
    '''
        SELECT
        `app01_book`.`id`,
        `app01_book`.`name`,
        `app01_book`.`price`,
        `app01_book`.`publish`,
        `app01_book`.`author`,
        `app01_book`.`create_data`
    FROM
        `app01_book`
    WHERE
        NOT (
            `app01_book`.`name` = 西游记
            AND `app01_book`.`price` = 23.8
        )
    '''
     ret=models.Book.objects.exclude(name='西游记',price='23.8')
     print(ret)
     print(ret.query)
     order_by 按价格升序排
     ret=models.Book.objects.all().order_by('price')
     print(ret)
     queryset对象可以继续 点 方法
     ret=models.Book.objects.all().order_by('price').filter(name='西游记')
     print(ret)
     按价格倒序排
     ret=models.Book.objects.all().order_by('-price')
     print(ret)
     可以传多个
     ret=models.Book.objects.all().order_by('-price','create_data')
     print(ret)
     print(ret.query)
     reverse 对结果进行反向排序
     ret=models.Book.objects.all().order_by('-price').reverse()
     print(ret)
     print(ret.query)
     count  查询结果个数
     ret=models.Book.objects.all().count()
     ret=models.Book.objects.all().filter(name='西游记').count()
     print(ret)
     last 返回book对象
     ret=models.Book.objects.all().last()
     print(ret)
     exists 返回结果是布尔类型
     ret=models.Book.objects.filter(name='三国演义').exists()
     print(ret)

     values(*field): queryset对象里套字典
     ret=models.Book.objects.all().values('name','price')
     ret=models.Book.objects.all().values('name')
     print(ret)
     value_list queryset对象里套元组
     ret=models.Book.objects.all().values_list('name','price')
     print(ret)
     distinct() 必须完全一样,才能去重   只要带了id,去重就没有意义了
     ret=models.Book.objects.all().values('name').distinct()
     print(ret)

     **************基于双下划线的模糊查询
     查询价格大于89 的书
     ret=models.Book.objects.filter(price__gt='89')
     print(ret)
     查询价格小于89 的书
     ret=models.Book.objects.filter(price__lt='89')
     print(ret)

     ret=models.Book.objects.filter(price__lt='89',price='89')
     小于等于
     ret=models.Book.objects.filter(price__lte='89')
     大于等于,
     ret = models.Book.objects.filter(price__gte='89')
     print(ret)
     in 在XX中
     ret=models.Book.objects.filter(price__in=['23.8','89','100'])
     print(ret)
     print(ret.query)
     range 在XX范围内 between and
     ret=models.Book.objects.filter(price__range=[50,100])
     print(ret.query)
     contains  查询名字有'%红%'的书
     ret=models.Book.objects.filter(name__contains='红')
     print(ret)
     print(ret.query)
     icontains 查询名字带p的书,忽略大小写
     ret=models.Book.objects.filter(name__icontains='P')
     print(ret)
     print(ret.query)
         startswith  以XX开头
     ret=models.Book.objects.filter(name__startswith='红')
     print(ret)
     print(ret.query)
     endswith
     ret=models.Book.objects.filter(name__endswith='梦')
     print(ret)

     pub_date__year 按年查询
     ret=models.Book.objects.filter(create_data__year='2017')
     print(ret)
原文地址:https://www.cnblogs.com/zhouhao123/p/9948270.html