飞道的博客

江湖小白之进阶篇 (二)Sanic异步框架的搭建及基本使用

414人阅读  评论(0)

最近摆摊经济被国家大力支持,抓住这波红利,抓紧时间赶紧完成这篇的知识点内容,晚上选个好位置发展一下副业,买车买房就靠这一波了~~!

来,快速进入主题,我们进阶篇的目的是开发一个在线提取及压缩pdf文件的网站,在web端中不像是在c端有信息槽的机制,在web端中想实现实时信息接收,要不就是轮询,要不就是用websocket,很明显轮询这种方式不太符合我们这种即将迈入中高级程序员的身份,那我们就选择后者,在实现的过程中,pdf有可能较大,多页的情况,在处理pdf文件的时候可能需要耗费一定的时间,在web端我们不可能提交一个请求就一直等待着最后结果的返回,理想的结果是我们提交了任务,就让服务端自己在后台运行,不要阻塞浏览器的操作,那这就是异步框架的优势,所以综上观察,Sanic异步框架很适合我们目前需求的开发,那接下来我们就来搭建Sanic框架,它的框架和Flask框架在写法上有惊人的相似之处,如果看过我之前章节的同学应该很容易就明白,没看过的也没关系,要使用我们就要先安装它,很简单执行一下下面的命令:

pip install sanic

安装完成后,第一步我们还是打好基础,创建项目目录:

这里的结构和Flask框架的一摸一样,多了一个files文件夹是用来存放提取的PDF图片文件的,首先我们来实现一下Sanic框架的“你好,美女!”(我已经对“Hello,world!”快要吐了),首先我们在run.py文件写入:


  
  1. #coding:utf-8
  2. from sanic import Sanic
  3. from sanic.response import text
  4. #初始化
  5. app = Sanic(__name__)
  6. #定义路由实现首页显示
  7. @app.route("/")
  8. async def index(request):
  9. return text( "你好,美女!")
  10. if __name__ == "__main__":
  11. app.run(host= "127.0.0.1", port= 5000,debug= True)

从上面看是不是有种似曾相似燕归来的赶脚,sanic.response中包含了一些常用的方法,比如text,json,html.file,stream,redirect等等方法,深入研究的可以去看看官方文档,仔细一看是不是这里有点区别:

request这是请求,在这里一定要写上,多了个async,这里就是申明异步方法,我们来运行看看:

看见没,Build Fast. Run Fast.这就是这个框架的特点,总结三个字:啥都快!来看看页面的输出:

嗯,就是怎么简单,那还是老规矩,我们来拆解下,部署到项目框架里,

app/__init__.py:     app文件夹初始化文件


  
  1. #coding:utf-8
  2. from sanic import Sanic
  3. app = Sanic(__name__)
  4. from webpdf.app import main #引入主文件

app/main.py:      主文件


  
  1. #coding:utf-8
  2. from webpdf.app import app
  3. from sanic.response import text
  4. @app.route("/")
  5. async def index(request):
  6. return text( "你好,美女!")

run.py: 执行文件


  
  1. #coding:utf-8
  2. from webpdf.app import app
  3. if __name__ == "__main__":
  4. app.run(host= "127.0.0.1", port= 5000,debug= True)

拆分好了,这时候可能有童鞋要问了,那怎么像flask那样引用jinja2模版文件呢,这里还需要安装下:SanicJinja2

pip install sanic_jinja2

接着我们在main.py修改下:


  
  1. #coding:utf-8
  2. from webpdf.app import app
  3. from sanic_jinja2 import SanicJinja2
  4. #把app传进去实例化jinja对象
  5. jinja = SanicJinja2(app)
  6. @app.route("/")
  7. async def index(request):
  8. msg={ "name": "李四", "age": "18"}
  9. return jinja.render( 'index.html',request, msg=msg)

同样我们在templates文件夹下创建一个index.html的文件:


  
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title </title>
  6. </head>
  7. <body>
  8. 姓名:{{msg.name}} <br>
  9. 年龄:{{msg.age}}
  10. </body>
  11. </html>

来执行下:

这里的模版页默认路径也是在templates下,那static静态文件夹呢,这里我们自己要定义下,在app/__init__.py文件中加入:


  
  1. app.static( '/static', 'app/static/') #定义静态资源文件夹路径
  2. app.static( '/files', 'app/files/') #提取pdf图片存放的文件夹路径

这样我们就可以在模版页中加载静态资源文件了,引用方法跟flask一样。

好了,由于急着去摆摊,针对Sanic框架的基本搭建及运用就先到这里,下节接着说下Sanic如何实现异步非阻塞请求及websocket服务的实现。

人生和地摊一样,错过了摆地摊就错过了人生,江湖不说再见,咱们下篇见!

关注公众号,超越平凡才能成就自我


转载:https://blog.csdn.net/jylonger/article/details/106555114
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场