07-02 django 6-10
______egon新书python全套来袭请看:https://egonlin.com/book.html
6. Django中models利用ORM对Mysql进行查表的语句(多个语句)?
字段查询
all():返回模型类对应表格中的所有数据。
get():返回表格中满足条件的一条数据,如果查到多条数据,则抛异常:MultipleObjectsReturned,
查询不到数据,则抛异常:DoesNotExist。
filter():参数写查询条件,返回满足条件 QuerySet 集合数据。
条件格式:
模型类属性名__条件名=值
注意:此处是模型类属性名,不是表中的字段名
关于 filter 具体案例如下:
判等 exact。
BookInfo.object.filter(id=1)
BookInfo.object.filter(id__exact=1)此处的__exact 可以省略
模糊查询 like
例:查询书名包含'传'的图书。contains
1. contains BookInfo.objects.filter(btitle__contains=’传’)
空查询 where 字段名 isnull
1. BookInfo.objects.filter(btitle__isnull=False)
范围查询 where id in (1,3,5)
1. BookInfo.objects.filter(id__in=[1,3,5])
比较查询 gt lt(less than) gte(equal) lte
1. BookInfo.objects.filter(id__gte=3)
日期查询
1. BookInfo.objects.filter(bpub_date__year = 1980)
2. BookInfo.objects.filter(bpub_date__gt = date(1980,1,1))
exclude:返回不满足条件的数据。
3. BookInfo.objects.exclude(id=3)
F 对象
作用:用于类属性之间的比较条件。
1. from django.db.models import F
2. 例:where bread > bcomment BookInfo.objects.filter(bread__gt =F(‘bcomment’))
3. 例:BookInfo.objects.filter(bread__gt=F(‘bcomment’)*2)
Q 对象
作用:用于查询时的逻辑条件。可以对 Q 对象进行&|~操作。
1. from django.db.models import Q
2. BookInfo.objects.filter(id__gt=3, bread__gt=30)
3. BooInfo.objects.filter(Q(id__gt=3) & Q(bread__gt=3))
4. 例:BookInfo.objects.filter(Q(id__gt=3) | Q(bread__gt=30))
5. 例:BookInfo.objects.filter(~Q(id=3))
order_by 返回 QuerySet
作用:对查询结果进行排序。
1. 例: BookInfo.objects.all().order_by('id')
2. 例: BookInfo.objects.all().order_by('-id')
3. 例:BookInfo.objects.filter(id__gt=3).order_by('-bread')
聚合函数
作用:对查询结果进行聚合操作。
1. sum count max min avg
aggregate:调用这个函数来使用聚合。
1. from django.db.models import Sum,Count,Max,Min,Avg
2. 例:BookInfo.objects.aggregate(Count('id'))
{'id__count': 5} 注意返回值类型及键名
1. 例:BookInfo.objects.aggregate(Sum(‘bread’))
{‘bread__sum’:120} 注意返回值类型及键名
count 函数
作用:统计满足条件数据的数目。
例:统计所有图书的数目。
1. BookInfo.objects.all().count()
例:统计 id 大于 3 的所有图书的数目。
1. BookInfo.objects.filter(id__gt = 3).count()
模型类关系
一对多关系
例:图书类-英雄类
models.ForeignKey() 定义在多的类中。
2)多对多关系
例:新闻类-新闻类型类
models.ManyToManyField() 定义在哪个类中都可以。
3)一对一关系
例:员工基本信息类-员工详细信息类
models.OneToOneField() 定义在哪个类中都可以。
7. django中间件的使用?
面试官问你Django中间件的时候,我们不应该只是局限于面试官的问题,而应做到举一反三。
面试之前准备一些白纸,在问到一些问题的时候应该用画图的形式展示出来
比如这里问到Django的中间件,我们应该给面试官画出Django的生命周期整体流程图,把中间件作为一部分的回答内容,
这样的好处在于,即展示了你对Django从前到后的流程都很熟悉又回答了面试官的问题,还顺带秀了一把其他技能,一举两得。
中间件介绍:作为Django的门户,一切请求都会先经过中间件才会到达Django后端,所以中间件可以用来做全局方面的一些功能
详细:给我们定义了五个方法
1.def process_request(request):
pass
2.def process_view(request):
pass
3.def process_template_response(request):
pass
4.def process_exception(request):
pass
5.def process_response(request):
pass
这些内容应该做到快速回答,不要"慢条斯理"的,搞IT的都很忙好吧,知识点一定要掌握牢固,脱口而出
一定要记住你是需要在有限的时间内将自己的看家本领不遗余力的倾囊而出
8. 谈一下你对uWSGI和 nginx的理解?
1.uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
WSGI是一种通信协议。
uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
2. nginx是一个开源的高性能的HTTP服务器和反向代理:
1.作为web服务器,它处理静态文件和索引文件效果非常高;
2.它的设计非常注重效率,最大支持5万个并发连接,但只占用很少的内存空间;
3.稳定性高,配置简洁;
4.强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力应用。
9. 说说nginx和uWISG 服务器之间如何配合工作的?
首先浏览器发起http请求到nginx服务器,Nginx根据接收到请求包,进行url分析,判断访问的资源类型,如果是静态资源,直接读取静态资源返回给浏览器,如果请求的是动态资源就转交给uwsgi服务器,uwsgi服务器根据自身的uwsgi和WSGI协议,找到对应的Django框架,Django框架下的应用进行逻辑处理后,将返回值发送到uwsgi服务器,然后uwsgi服务器再返回给nginx,最后nginx将返回值返回给浏览器进行渲染显示给用户。 如果可以,画图讲解效果更佳,可以 将下面的图画给面试官。
10. django开发中数据库做过什么优化?
1.设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能;
2.使用缓存,减少对数据库的访问;
3.在orm框架下设置表时,能用varchar确定字段长度时,就别用text;
4.可以给搜索频率高的字段属性,在定义时创建索引;
5.Django orm框架下的Querysets 本来就有缓存的;
6.如果一个页面需要多次连接数据库,最好一次性取出所有需要的数据,减少对数据库的查询次数;
7.若页面只需要数据库里某一个两个字段时,可以用QuerySet.values();
8.在模板标签里使用with标签可以缓存Qset的查询结果。