博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

CGI,FastCGI,WSGI,uWSGI,uwsgi,分组查询

Posted on 2022-03-05 20:38  ~sang  阅读(23)  评论(0编辑  收藏  举报
# gitee上怎么下载项目
1.克隆/下载 -- 复制 -- pycharm上的VCS -- Get from Version Control...
   2.克隆/下载 -- 下载ZIP -- 用pycharm打开
   
# settings.py文件修改时区语言
LANGUAGE_CODE = 'zh-hans'
   TIME_ZONE = 'Asia/Shanghai'
   USE_I18N = True
   USE_L10N = True
   USE_TZ = False
   
# 创建书跟作者的关联关系
book.authors.add(*authors)  # 将列表形式的对象打散成位置参数形式

CGI,FastCGI,WSGI,uWSGI,uwsgi

# CGI
1.通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准
   2.CGI程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。
   3.用来规范web服务器传输到php解释器中的数据类型以及数据格式,包括URL、查询字符串、POST数据、HTTP header等,也就是为了保证web server传递过来的数据是标准格式的
   4.一句话总结:一个标准,定义了客户端服务器之间如何传数据
# FastCGI
1.快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。
   2.FastCGI致力于减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。
   3.使用FastCGI的服务器:
     Apache HTTP Server (部分)
     Cherokee HTTP Server
     Hiawatha Webserver
     Lighttpd
     Nginx
     LiteSpeed Web Server
     Microsoft IIS
   4.一句话总结:CGI的升级版
# WSGI
1.Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
   2.一句话总结:为python定义的web服务器和web框架之间的接口标准
# uWsgi
1.它是一个Web服务器(类似的有wsgiref,gunicorn),它实现了WSGI协议、uwsgi、http等协议。用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。
   2.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换
   3.一句话总结: 一个Web Server,即一个实现了WSGI的服务器,大体和Apache是一个类型的东西,处理发来的请求。
# uwsgi
1.它是uWSGI服务器实现的独有的协议,用于定义传输信息的类型,是用于前端服务器与 uwsgi 的通信规范。
   2.一句话总结: uWSGI自有的一个协议
   uWSGI:web服务器,等同于wsgiref
uwsgi:uWSGI自有的协议

 

分组查询

# 把同一类归为一组,然后使用聚合函数操作;如果是多表,把表连起来,再分组,再聚合,取的字段必须是分组字段或者聚合函数的字段
'''
annotate()内写聚合函数
values在前,表示group by的字段
values在后,表示取字段
filter在前,表示where条件
filter在后,表示having
'''
# 查询每一个出版社id,以及出书平均价格(单表)
   # 原生sql
   # select publish_id,avg(price) from book group by publish_id;
   # orm实现
   from django.db.models import Avg,Count,Max
   # res=models.Book.objects.values('publish_id').annotate(price_avg=Avg('price')).values('publish_id','price_avg')
   # print(res)

   # 查询出版社id大于1的出版社id,以及出书平均价格
   # res=models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(price_avg=Avg('price')).values('publish_id','price_avg')
   # print(res)

   # 查询出版社id大于1的出版社id,以及出书平均价格大于120的
   # res=models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(price_avg=Avg('price')).filter(price_avg__gt=120).values('publish_id','price_avg')
   # print(res)

   # 查询每一个出版社的id和出版的书籍个数(连表)
   # res=models.Publish.objects.values('nid').annotate(book_count=Count('book__nid')).values('nid','book_count')
   # print(res)
   # 简写成,如果基表是group by的表,就可以不写values
   # res=models.Publish.objects.annotate(book_count=Count('book__nid')).values('nid','book_count')
   # print(res)

   # 查询每个作者的名字,以及出版过书籍的最高价格(建议使用分组的表作为基表)
   # res=models.Author.objects.annotate(price_max=Max('book__price')).values('name','price_max')
   # print(res)

   # 查询每一个书籍的名称,以及对应的作者个数
   # res=models.Book.objects.annotate(author_count=Count('authors')).values('name','author_count')
   # print(res)
   '''联表的话最好以group by的表作为基表,就可以不写values'''