首页 > 编程语言 >Python_web开发基础内容

Python_web开发基础内容

时间:2023-11-03 17:11:05浏览次数:42  
标签:web http 请求 Web Python app 开发 Sanic 服务器

网络

长连接的HTTP协议,会在响应头有加入这个头部字段:Connection:keep-alive
  WebSocket:需要通过网络传输的任何实时更新或连续数据流,则可以使用WebSocket
       HTTP:不需要很频繁或仅获取一次的数据可以通过简单的HTTP请求查询 
都是用来跟踪浏览器用户身份的会话方式
 .cookie的数据存放在客户的本地文件中,session的数据存放在服务器
 
 Long Polling长轮询
  WebSocket? 客户端和服务器之间建立一个持久的长连接,这个连接是双工的,客户端和服务端都可以实时地给对方发送消息。

Python的Web开发

1.web开发框架
  Django 
  异步框架 Flask
  异步框架 sanic
	  
2.python asyncio 是用来编写 并发 代码的库,使用 async/await 语法

 ASGI (Asynchronous Server Gateway Interface) 和 WSGI (Web Server Gateway Interface) 
   是用于连接 Web 服务器和 Python Web 应用程序的两种不同的接口标准。
 网络
 web server(如Apache、Nginx)和web app(或web app框架)之间的标准
  Web服务器网关接口(Web Server Gateway Interface,缩写为 WSGI)
   Emscripten:  Emscripten是一个开源的编译器,该编译器可以将 C/C++ 的代码编译成JavaScript胶水代码
   WASI WASI,全名为 WebAssembly System Interface
   ASGI标准,该标准是WSGI标准
  
  uWSGI:uWSGI 是一个 Web 服务器,它是一个用 C 语言编写的 Web 应用程序容器, 
  uwsgi:uwsgi 是一个与 uWSGI 服务器相关的协议	  
   
 Web 服务器来处理 HTTP 协议的内容
    WSGI 内部能够分为三类,web 应用程序,web 服务器,web 中间件
	
服务:  
    浏览器发起http请求到nginx服务器,
	  Nginx根据接收到请求包,进行url分析,判断访问的资源类型,
	    如果是静态资源,直接读取静态资源返回给浏览器,
	    如果请求的是动态资源就转交给uwsgi服务器,uwsgi服务器根据自身的uwsgi和WSGI协议,
		  找到对应的Django框架,Django框架下的应用进行逻辑处理后,
		  将返回值发送到uwsgi服务器,然
	  后uwsgi服务器再返回给nginx,
	最后nginx将返回值返回给浏览器进行渲染显示给用户

 Gunicorn 是基于unix系统,被广泛应用的高性能的 Python WSGI HTTP Server。用来解析HTTP请求的网关服务 

应用服务器

1.http 服务器: 最主流的三个Web服务器是Apache、 Nginx 、IIS	 Lighttpd是一个轻量级的Web服务器 
   连接过程、请求过程、应答过程以及关闭连接
   Tomcat是一个开源的Web服务器,它实现了Java Servlet和JavaServer Pages(JSP)规范,可以让您在服务器端运行Java代码。
   Apache 的三种工作模式(Prefork、Worker、Event)
     Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式。
     它们分别是prefork,worker、event,它们同时也代表这Apache的演变和发展 
   
2.python 
   WSGI服务器有 Gunicorn、uWSGI和mod_wsgi	
   ASGI服务器有 Daphne 和 Uvicorn等。 
        Daphne是一个基于 Twisted的ASGI服务器,它可以处理异步Web应用程序的请求。
        Uvicorn是一个基于 uvloop 和httptools的ASGI服务器,它具有高性能和低内存占用的特点
		有三大主流的 ASGI 服务器, 
		  Daphne(opens new window),Uvicorn(opens new window),和 Hypercorn(opens new window) 。
3.异步框架
     uvloop是基于Cython写的,执行效率更高。
     uvloop底层基于 libuv,而libuv是高性能、跨平台的异步IO库,nodejs的事件循环也是基于libuv的
  http请求 TCP请求
4.网络I/O库 (libevent,libuv,libev,libeio) 
    epoll 是由 Linux 内核提供的一个系统调用(system call)	
   Linux Libuv是一个轻量级、高性能、多平台的异步I/O库
   (如select、poll、epoll、kqueue、evports等I/O多路复用模型)
   glibc提供的aio函数库,所以称为glibc aio

框架

Flask框架带有一个内置的开发服务器,并明确表示它只用于开发。而 Sanic 的情况恰好相反
sanic
    Sanic 不仅仅是一个 框架,它还是一个 Web 服务器	
      Sanic 将配置保存在 Sanic 对象的 config 属性中。可以使用 属性操作 或 字典操作 的方式来修改配置。	


    @app.get("/async")
    async def async_handler(request):
        await asyncio.sleep(0.1)
        return text("Done.")
    	
    自带的服务器
	    Sanic 服务器(Sanic Server)
		    当使用 Sanic 服务器,websocket 功能将使用 websockets 包来实现
			 Sanic 则有四个事件:启动前、启动后、关闭前和关闭后
    其他服务器
       用支持 ASGI 应用的服务器来部署 Sanic,或者使用 Gunicorn
	     ASGI 服务器将会管理 websocket 链接。
		  ASGI 只支持两种服务器事件:启动和关闭
		Gunicorn pre-fork worker 模型

sanic

 定义 ORM 模型 ORM(Object Relational Mapping)框架 
   1.SQLAlchemy 1.4(opens new window) 版本中,添加了对 asyncio 的原生支持
     sqlalchemy 和 aiomysql
   2.tortoise-orm

Docker 部署(Docker Deployment)

  1.开发功能
  2.构建镜像(Build Image)
  3.启动容器(Start Container)
  4.使用 docker-compose 编排(Use docker-compose)

概念

  实例(Instance)
  应用上下文(Application context)	
  App 注册表(App Registry)
  配置(Configuration)
  自定义(Customization) 自定义上下文(Custom context) 自定义请求(Custom requests) 自定义错误响应函数(Custom error handler)
第二个重要的组件就是响应函数(Handlers),也就是我们通常所说的视图(views)
请求(Request)
    请求体(Body) 请求上下文(Request context) 连接上下文(Connection context) 路由参数(Parameter) 请求参数(Arguments)
响应(Response)
   响应方式(Methods) 默认状态码(Default Status)
注入操作   
 节点上设置监听器可以让您可以完成一些注入操作。但是这里并不包括信号,信号允许进一步的注入定制 启用监听器(Attaching a listener)
 监听器允许您将功能挂载到工作进程的生命周期,而中间件允许您将功能挂载到 HTTP 流的生命周期 
Sanic的三个方面:Request 、Routing、Response。
   HTTPS相当于需要设置SSL证书,sanic官方文档写的是
   
 接收请求  找到对应的路由并执行路由对应的视图函数  Jinja2模板渲染返回视图  
   路由就和 uri 对应的视图函数关联起来了,这就是承上,路由和视图函数就是这样对应的关系
   
 常规
    对于css、js等静态文件,常规操作是将其放在自己建立的statics下面
    对于html模板,常规操作是将其放在自己建立的templates下面
    视图函数(即服务的逻辑实现)放在自己建立的views下面	 
  Blueprint 

将Python函数变成API

  Sanic通过注解来定义接口方法
  一:用Sanic.route()方法来声明接口信息
  二:用Sanic封装好的请求方法
  三:使用类视图
  
  路由的写法都是以装饰器的形式出现
  
   request.form           #获取整个表单
   request.body     #获取body的内容	
   request.json	   

代码

from sanic import Sanic
from sanic.response import text,json
 
app = Sanic("HelloWorld")
@app.get("/hello")
async def hello_world(request):
    return text("Hello, this is my first app in Sancic framework.")
	
@app.route('/post', methods=['POST'])
async def post_handler(request):
    ###请求
    data = request.form
    ##处理 在这里对接收到的数据进行处理
    response = {'message': '成功接收到POST请求', 'data': data}
	##响应
    return json(response)	
	
	
if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8700)  

执行程序

 python app.py	
 任何HTTP客户端向http://localhost:8000/post发送POST请求,并查看返回的响应。
 
 server.py
 默认命令sanic server.app
 python -m sanic --dev server.app
 python -m sanic HelloWorld.app --host=127.0.0.1 --port=7890

构建http请求

1.构建http请求
   1.通过浏览器自己构造
     http://localhost:8000/hello 
     回车,此时我们发的是 GET 请求	
     GET 传参数只能在 url 后面带上参数,比如 http://www.helloworld.net?name=tom&age=23	 
      服务器收到请求就可以解析出来 url 后面带的参数了,name = tom , age = 23
   2.通过postman构造
   
   3.requests库构建HTTP请求
    构建HTTP请求: 1.构建请求URL参数  2.构建请求消息头  3.构建请求消息体  4.检查HTTP响应
##Python通过提供requests库,实现了对网络编程的强大支持
  向服务器发送表单数据

import requests
import json
response = requests.get('http://mirrors.sohu.com/')
print(response.content)
####post请求传body的参数有两种:data和json
response = requests.post("http://httpbin.org/post", data={1:1,2:2})
obj = json.loads(response.content.decode('utf8'))
print(obj)		

dic = {'key1': 'value1', 'key2': 'value2'}
string = json.dumps(dic)
r = requests.post("http://httpbin.org/post", data=string)

###request 
   1.使用cookies模拟登录 2.使用session模拟登录

file = {'file': open('report.xls', 'rb')}
response = requests.post('http://www.example.com/upload', files=file)

DevOps(Development和Operations的组合词

参考

 Sanic​——Python函数变成API的神器 https://blog.csdn.net/Rocky006/article/details/133861118
微服务Sanic制作一个简易本地restful API	 

标签:web,http,请求,Web,Python,app,开发,Sanic,服务器
From: https://www.cnblogs.com/ytwang/p/17808011.html

相关文章

  • 如何在知识付费系统小程序开发中实现社区互动和用户参与
    在知识付费系统小程序的开发中,实现社区互动和用户参与可以通过以下步骤实现:1.建立用户身份验证和管理系统//后端示例代码(Node.js)//用户注册app.post('/register',(req,res)=>{const{username,email,password}=req.body;//处理用户注册逻辑});//用户登录......
  • GPT-4 变笨加剧,一个笑话讲八百遍;ChatGPT 之父剑桥演讲遭抵制丨 RTE 开发者日报 Vol.77
     开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE (RealTimeEngagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎......
  • Python-运算符
    Python-运算符1.Python运算符的优先级以下表格列出了从最高到最低优先级的所有运算符:如果是同优先级则从左往右依次递减运算符描述**乘方,指数(最高优先级)~+-按位翻转,一元加号和减号(最后两个的方法名为+@和-@)*/%//乘,除,取模和取整除+-......
  • 自家开发VS第三方美颜SDK:技术和资源的比较
    开发直播平台时,开发人员面临一个关键决策:是选择使用第三方美颜SDK,还是自家开发美颜算法?本文将深入探讨这两种方法的技术和资源方面的比较,帮助开发者更好地决定哪种途径最适合他们的应用。一、第三方美颜SDK:完善且便捷第三方美颜SDK是已经开发好的软件包,开发者可以将其集成到他们的......
  • Python 中的 __init__.py 和__all__ 详解(抄袭的joker) 因为写的实在是太好了
    Python中的__init__.py和__all__详解JOKER没意思先生 之前不论是自己写代码还是用别人的代码,都没有注意过这个东西,今天忽然看了一下,网上的教程感觉讲的都不是很清楚,自己又研究了研究,总结一下,如果有不对的地方,大家帮忙指正一下。在Python工程里,当pyth......
  • 知识付费系统小程序开发中的最新趋势和技术是什么?
    在迅速发展的移动应用市场中,知识付费系统小程序成为了在线学习和知识传递的重要形式。随着技术的不断进步,了解最新的趋势和技术对于开发知识付费系统小程序至关重要。本文将讨论当前在这一领域中备受关注的最新趋势和技术。1.跨平台开发框架的崛起使用诸如ReactNative、Flutter和......
  • python 中[1:]、[:-1]和[::-1]
    代码分析:str='abcdefg'print(str[1:])print(str[:-1])print(str[-1:])print(str[::-1])print(str[::-2])print(str[:])-------------------------------------------------------------------------------------------结果bcdefgabcdefggfedcbagecaabcdefg1234567......
  • 基于泛微Ecology代码块开发实现劳动合同开始结束日期、试用开始结束日期计算赋值
    基于泛微Ecology代码块开发实现劳动合同开始结束日期、试用开始结束日期计算赋值//劳动合同开始结束日期、试用开始结束日期计算赋值,载入时触发,jQuery().ready(function(){ varCalculatecontractdate=function(){//获取相关数据varrzrq=WfForm.getFieldValue("field10954")......
  • Web组态是大趋势 国内工控组态软件现状
    工控组态软件发展历史组态软件是随着计算机在工业领域的广泛应用而兴起的,最早的组态软件诞生于上世纪80年代,它起源于DCS,壮大于PLC。在组态软件进入工业领域之前,企业往往需要聘请编程人员或向软件公司定做工业控制软件来应对日常生产。这类软件是专为了某套自动控制系统编写的,如果该......
  • TensorFlow、PyTorch、Keras、Scikit-learn和ChatGPT。视觉开发软件工具 Halcon、Visi
     目录TensorFlow、PyTorch、Keras、Scikit-learn和ChatGPT1.TensorFlow2.PyTorch3.Keras视觉开发软件工具Halcon、VisionPro、LabView、OpenCV,还有eVision、Mil、Sapera等。(一)、Halcon(二)OpenCV:ComputerVision(计算机视觉)(三)VisionProTensorFlow、PyTorch、Keras、Scikit-learn和......