DAY 51 django06
-1 前后端混合开发(咱们前后端都写)
前后端分离,前端的人专门写前端,后端的人专门写后端
0 django的模板语法
-dtl:在模板中写python代码 ../14550984.html
-php:http://www.aa7a.cn/user.php
-java:https://www.pearvideo.com/category_loading.jsp
-go:../14550984.html
-jsp javascript
1 后续的课程
-django高级,ajax,分页,auth,中间件..
-BBS项目
-drf:写接口
-vue
-路飞:git,celery,redis,发短信....
-flask
-cmdb:自动化运维
-爬虫
-go
-es
-redis高级
-rabbitmq,rpc
-mongodb
-mysql 主从,读写分离,分库分表
-分布式锁,分布式id。。。。
2 python后端开发,爬虫,自动化运维,自动化测试,python开发(写脚本)
数据分析,go开发
3 多对多操作的api
-add
-remove
-clear
-set
4 什么情况下手动创建第三张表?
-第三张表中有其它额外的字段
1 分组查询
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day53.settings")
if __name__ == '__main__':
import django
django.setup()
from app01 import models
# 查询每一个出版社id,以及出书平均价格(单表)
# 原生sql
# select publish_id,avg(price) from book group by publish_id;
# orm实现
'''标准 annotate() 内写聚合函数
values在前,表示group by 的字段
values在后,表示取字段
filter在前,表示where条件
filter在后,表示having
'''
from django.db.models import Avg,Count,Max
# res = models.Book.objects.all().\
# values('publish_id').\
# annotate(price_ave=Avg('price')).values('publish_id','price_ave')
# print(res)
# 查询出版社id大于1的出版社id,以及出书平均价格
# res=models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(price_ave=Avg('price')).values('publish_id','price_ave')
# print(res)
# 查询出版社id大于1的出版社id,以及出书平均价格大于30的
# res=models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(price_ave=Avg('price')).filter(price_ave__gt=60).values('publish_id','price_ave')
# print(res)
#查询每一个出版社出版的名称和书籍个数(连表)
# 联表的话最好以group by的表作为基表
# res=models.Publish.objects.values('nid').annotate(book_count=Count('book__nid')).values('name','book_count')
# 简写成,如果基表是group by的表,就可以不写values
# res=models.Publish.objects.annotate(book_count=Count('book')).values('name','book_count')
# 以book为基表
# print(res)
#查询每个作者的名字,以及出版过书籍的最高价格(建议使用分组的表作为基表)
# 多对多如果不以分组表作为基表,可能会出数据问题
# res=models.Author.objects.annotate(price_max=Max('book__price')).values('name','price_max')
# res=models.Book.objects.values('authors__nid').annotate(price_max=Max('price')).values('authors__name','price_max')
# print(res)
#查询每一个书籍的名称,以及对应的作者个数
res=models.Book.objects.annotate(count=Count('authors')).values('name','count')
print(res)
##统计不止一个作者的图书
## 统计价格数大于10元,作者的图书
##统计价格数大于10元,作者个数大于1的图书
res=models.Book.objects.filter(price__gt=10).annotate(count=Count('authors')).filter(count__gt=1).values('name','price','count')
print(res)
2 图书管理系统项目
1 后端是django+mysql/sqlite
2 前端:jquery,bootstrap
3 首页,图书列表展示,图书新增,修改,作者展示,新增,修改,出版社展示,新增,修改。。。
4 项目地址:https://gitee.com/liuqingzheng/books
补充
1 wsgi,uwsgi,cgi,fastcgi
python:有wsgi协议,uwsgi,gunicorn
java:tomcat,jboss
php:php服务器
wsgi:协议,规定了如何拆http请求,拆到一个python字典中,environment,响应对象,start_response
wsgiref:符合wsgi协议的web服务器
详情见:http://www.liuqingzheng.top/article/1/05-CGI,FastCGI,WSGI,uWSGI,uwsgi%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82/
# asgi协议
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!