接上篇文章:https://blog.csdn.net//article/details/125813096?spm=1001.2014.3001.5501
二十一、selected_related与prefetch_related有什么区别?(重要)
在Django中,所有的Queryset都是惰性的,意思是当创建一个查询集的时候,并没有跟数据库发生任何交互。因此我们可以对查询集进行级联的filter等操作,只有在访问Queryset的内容的时候,Django才会真正进行数据库的访问。而多频率、复杂的数据库查询往往是性能问题最大的根源。
不过我们实际开发中,往往需要访问到外键对象的其他属性。如果按照默认的查询方式去遍历取值,那么会造成多次的数据库查询,效率可想而知。
在查询对象集合的时候,把指定的外键对象也一并完整查询加载,避免后续的重复查询。
1,select_related
适用于外键和多对一的关系查询;
2,prefetch_related
适用于一对多或者多对多的查询。
二十二、什么是Cookie、如何获取、设置Cookie
会话跟踪技术,保留用户
Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。
具体一个浏览器针对一个服务器存储的key-value({ })
设置Cookie
response.set_cookie("is_login",True)
获取
request.COOKIES.get("is_login")
二十三、什么是session,与cookie的对比、设置、获取、清空session
Session是服务器端技术,利用这个技术,服务器在运行时可以 为每一个用户的浏览器创建一个其独享的session对象,由于 session为用户浏览器独享,所以用户在访问服务器的web资源时 ,可以把各自的数据放在各自的session中,当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中 取出数据为用户服务。
设置session
request.session['username']="kobe"
request.session.set_expiry(7*24*3600) # 设置session过期时间为一周后
获取session
username=request.session.get('age','')
删除session
request.session.flush()
二十四、简述什么是FBV和CBV
FBV(function base views)就是在视图函面使用函数处理请求
CBV(class base views)就是在视图里面使用类处理请求
二十五、命令migrate 和makemigrations的差别
生成迁移文件
python manage.py makemigration 子应用名