一:查询集:
1:概念:从数据库中获取的对象集合
2:哪些方法返回查询集??

all():返回所有数据。
filter():返回满足条件的数据。
exclude():返回满足条件之外的数据。
order_by():对结果进行排序。

3:查询集的两大特性:
特性一:惰性:
解析:创建查询集不会访问数据库,直到调用数据时,才会访问数据库
案例:qs = BookInfo.objects.all(),这句话不会查询数据库,而是真正打印,才会连接数据库进行查询。
特性二:缓存:
使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。
案例:

from booktest.models import BookInfo
[book.id for book in BookInfo.objects.all()]
[book.id for book in BookInfo.objects.all()]

解析:这段代码,每次执行这个语句都会去访问数据库,而访问频繁数据库会降低执行效率。

qs=BookInfo.objects.all()
[book.id for book in qs]
[book.id for book in qs]

这段代码,qs=BookInfo.objects.all(),不执行。第一次执行[book.id for book in qs],访问数据库,并且把访问数据库的信息保存在qs中,下一次再次执行[book.id for book in qs],不再访问数据库了,而是直接在缓存中取数据,这样提高了查询的效率,但是因为这样,每次拿到的都不是数据库的最新的数据,也就不能保证数据的准确性了。

二:模板的基本使用:
1:配置模板:
首先:在工程根目录下创建模板文件目录templates
2:在settings.py配置文件中修改TEMPLATES配置项的DIRS值:

TEMPLATES = [
  {
      'BACKEND': 'django.template.backends.django.DjangoTemplates',
      #指定模板文件目录的路径
      'DIRS': [os.path.join(BASE_DIR, 'templates')],
      'APP_DIRS': True,
      'OPTIONS': {
          'context_processors': [
              'django.template.context_processors.debug',
              'django.template.context_processors.request',
              'django.contrib.auth.context_processors.auth',
              'django.contrib.messages.context_processors.messages',
          ],
      },
  },
]

注意:dirs是个路径的集合,所有的模板目录都需要配置在里面,os.path.join(BASE_DIR, ‘templates’)前面部分是根路径,后面引号里卖是相对于根目录的位置。

3:定义模板:
在templates目录中新建一个模板文件,如:temp.html

from django.shortcuts import render
from django.views import View

class TempView(View):
    def get(self, request):
        return render(request, 'temp.html')

4:测试模板渲染:
模板的语法是两个大括号:{{ 变量名 }}

class BooksView(View):
    """图书信息
    http://127.0.0.1:8000/books/
    """

    def get(self, request):
        # 构造上下文
        context = {
            'name': '张小厨',
            'age': 18
        }
        # 使用上下文渲染'book.html',并返回给客户端
        return render(request, 'book.html', context)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书信息页</title>
</head>
<body>
    <h1>{{ name }}</h1>
    <h1>{{ age }}</h1>
</body>
</html>

5:数据库数据渲染模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书信息页</title>
</head>
<body>
    <ul>
        {% for book in books %}
            <li>{{ book.btitle }}</li>
        {% endfor %}
    </ul>
</body>
</html>
class BooksView(View):
    """图书信息
    http://127.0.0.1:8000/books/
    """

    def get(self, request):
        books = BookInfo.objects.all()
        # 构造上下文
        context = {
            "books":books
        }
        # 使用上下文渲染'book.html',并返回给客户端
        return render(request, 'temp.html', context)