一:查询集:
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(),不执行。第一次执行[ for book in qs],访问数据库,并且把访问数据库的信息保存在qs中,下一次再次执行[ 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)