1、filter和exclude的区别?
取到的值都是QuerySet对象,filter选择满足条件的,exclude:排除满足条件的.
2、F和Q的作用?
F:对数据本身的不同字段进行操作 如:比较和更新
Q:用于构造复杂的查询条件 如:& |操作
3、values和values_list的区别?
values : 取字典的queryset
values_list : 取元组的queryset
4、如何使用django orm批量创建数据?
bulk_create()
objs=[models.Book(title="图书{}".format(i+15)) for i in range(100)]
models.Book.objects.bulk_create(objs)
5、Django的Form和ModeForm的作用?
Form作用:
1.在前端生成HTML代码
2.对数据作有效性校验
3.返回校验信息并展示
ModeForm:根据模型类生成From组件,并且可以操作数据库
6、Django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新。
#1.重写构造函数
def def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")
#2.利用ModelChoiceField字段,参数为queryset对象
7、django的Model中的ForeignKey字段中的on_delete参数有什么作用?
删除关联表中的数据时,当前表与其关联的field的操作
django2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常
8、django如何实现websocket?
# 列举django orm中三种能写sql语句的方法。
1.使用execute执行自定义的SQL
2.使用extra方法
3.使用raw方法
1.执行原始sql并返回模型
2.依赖model多用于查询
9、django orm 中如何设置读写分离?
#1.手动读写分离:通过.using(db_name)来指定要使用的数据库
#2.自动读写分离:
# 1.定义类:如Router
# 2.配置Router
settings.py中指定DATABASE_ROUTERS
DATABASE_ROUTERS = ['myrouter.Router',]
#提高读的性能:多配置几个数据库,并在读取时,随机选取。写的时候写到主库
#实现app之间的数据库分离:分库分表
10、django-debug-toolbar的作用?
#1.是django的第三方工具包,给django扩展了调试功能
#包括查看sql语句,db查询次数,request,headers等
11、解释orm中 db first 和 code first的含义?
#数据持久化的方式:
#db first基于已存在的数据库,生成模型
#code first基于已存在的模型,生成数据库库
12、django中如何根据数据库表生成model中的类?
#1.在settings中设置要连接的数据库
#2.生成model模型文件
python manage.py inspectdb
#3.模型文件导入到models中
python manage.py inspectdb > app/models.py
13、使用orm和原生sql的优缺点?
1.orm的开发速度快,操作简单。使开发更加对象化
执行速度慢。处理多表联查等复杂操作时,ORM的语法会变得复杂
2.sql开发速度慢,执行速度快。性能强
14、django的contenttype组件的作用?
这个组件保存了项目中所有app和model的对应关系,每当我们创建了新的model并执行数据库迁移后,ContentType表中就会自动新增一条记录。
当一张表和多个表FK关联,并且多个FK中只能选择其中一个或其中n个时,可以利用contenttypes
15、接口的幂等性是什么意思?
1.是系统的接口对外一种承诺(而不是实现)
2.承诺只要调用接口成功,外部多次调用对系统的影响都是一致的,不会对资源重复操作
16、什么是RPC?
远程过程调用 (RPC) 是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务
1.RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。
2.首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。
3.在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,
4.最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
17、为什么要使用API
系统之间为了调用数据。
数据传输格式:
1.json
2.xml
18、为什么要使用django rest framework框架?
能自动生成符合 RESTful 规范的 API
1.在开发REST API的视图中,虽然每个视图具体操作的数据不同,
但增、删、改、查的实现流程基本一样,这部分的代码可以简写
2.在序列化与反序列化时,虽然操作的数据不同,但是执行的过程却相似,这部分的代码也可以简写
REST framework可以帮助简化上述两部分的代码编写,大大提高REST API的开发速度
19、 简述 django rest framework框架的认证流程
1.用户请求走进来后,走APIView,初始化了默认的认证方法
2.走到APIView的dispatch方法,initial方法调用了request.user
3.如果我们配置了认证类,走我们自己认证类中的authentication方法
20、 django rest framework如何实现的用户访问频率控制
使用IP/用户账号作为键,每次的访问时间戳作为值,构造一个字典形式的数据,存起来,每次访问时对时间戳列表的元素进行判断,
把超时的删掉,再计算列表剩余的元素数就能做到频率限制了
匿名用户:使用IP控制,但是无法完全控制,因为用户可以换代理IP登录用户:使用账号控制,但是如果有很多账号,也无法限制
21、rest_framework序列化组件的作用,以及一些外键关系的钩子方法
作用:帮助我们序列化数据
1.choices get_字段名_display
2.ForeignKey source=orm 操作
3.ManyToManyFiled SerializerMethodField()
def get_字段名():
return 自定义
22、给前段提供一个接口之前需要提供什么?
1.跟前端进行和交互,确定前端要什么
2.把需求写个文档保存
23、 PV和UV
1.pv:页面访问量,没打开一次页面PV计算+1,页面刷新也是
2.UV:独立访问数,一台电脑终端为一个访客
24、 如何实现用户的登陆认证
1.cookie session
2.token 登陆成功后生成加密字符串
3.JWT:json wed token缩写 它将用户信息加密到token中,服务器不保存任何用户信息
服务器通过使用保存的密钥来验证token的正确性
25、如何将dict转换成url的格式:
#使用urlencode
from urllib.parse import urlencode
post_data={"k1":"v1","k2":"v2"}
ret=urlencode(post_data)
print(ret,type(ret))
k1=v1&k2=v2 <class 'str'>
26、django的模板中filter和simple_tag的区别?
自定义filter:{{ 参数1|filter函数名:参数2 }}
1.可以与if标签来连用
2.自定义时需要写两个形参
simple_tag:{% simple_tag函数名 参数1 参数2 %}
1.可以传多个参数,没有限制
2.不能与if标签来连用
27、列举django的内置组件?
1、Admin是对model中对应的数据表进行增删改查提供的组件 。
2、model组件:负责操作数据库 。
3、form组件:1.生成HTML代码2.数据有效性校验3校验信息返回并展示 。
4、ModelForm组件即用于数据库操作,也可用于用户请求的验证。
28、django路由系统中name的作用?
用于反向解析路由,相当于给url取个别名,只要这个名字不变,即使对应的url改变
通过该名字也能找到该条url
29、Django中csrf的实现机制
第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
第二步:下次前端需要发起请求(比如发帖)的时候把这个token值加入到请求数据或者头信息中,一起传给后端;Cookies:{csrftoken:xxxxx}
第三步:后端校验前端请求带过来的token和SESSION里的token是否一致;
30、only和defer的区别?
only:从数据库中只取指定字段的内容 .
defer:指定字段的内容不被检索.