一.查询
queryset =Record.objects.filter(car__card__startswith=carno)
解释:以上的这句代码是在Record这个类中调用object方法的。fileter()方法查询car这个类中的carno字段的值的开头是否和carno的相同 --startswith 就是模糊查询匹配开头。
startswith:字符串后面加%通配符的模糊查询
contains:字符串两端加%通配符的模糊查询
endswith:字符串前面加%通配符的模糊查询
Twacher.objects.filter(subject__no=sno).defer('subject')
Twacher.objects.filter(subject__no=sno).filter('subject')
查询----只查需要的
对象.object.filter().only(只查需要的)
查询----排除查询
对象.object.filter().defer(把那些排除在查询之外)
mapper 里面模型映射器
一个模型可以写一个或多个映射器
二.Q对象
Q对象是Django自带的,两个对象之间可以做运算。
@(而且) |(或者)
queryset = Record.objects.filter(
Q(car__carno__startswith=carno) |
Q(car__owner__contains=carno))
上面查询是这两个条件有一个成立就可以这就是Q对象
三.查询中的一些问题的解决的办法。
(1).多对多的查询:
.prefetch_related("tags") # 解决多对多的查询
.prefetch_related("tags") # 解决多对多的查询
(2).顺带查询----不需要额外再发sql'语句,提升性能。
select_related("type") 顺带查询 解决一加n查询.
四.POST和GET请求
return JsonResponse(data) 返回Json格式的数据
POST和GET是HTTP协议定义的与服务器交互的方法。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。另外,还有PUT和DELETE方法。
1.POST和GET都可以与服务器完成查,改,增,删操作。
2.GET提交,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接.
POST提交,把提交的数据放置在HTTP包的包体中;因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
五.控制台日志
1.日志的配置从官网直接copy,有详细的教程。
2程序日志的级别,越低越详细:
DEBUG < INFO < WARNING < ERRR<CRITICAL
六.数据查询时候的性能
1.数据库的1+n查询会导致数据的性能下降,如何解决?
2.查询时候当有一对多或则多对一的时候在view函数在通过Record.objects.filter()查询的时候加上select_related("关联的表")
queryset = Record.objects.filter(
Q(car__carno__startswith=carno) |
Q(car__owner__contains=carno)
).select_related("car").order_by("-offend_time")
3.使用代码调试的工具可以更直观的看出错误和查询的性能。
代码调试工具:
(1)ELK--------->日志的处理的平台。
ElasticSearch/Logstash/Kibana
(2)Django debug
想要写一些简单的前端页面样式-----https://element.eleme.cn/#/zh-CN/component/alert
去饿了吗分装好的共享网站
要实现定时任务要使用APSchedule或Celery三方库。










网友评论