手机使用记录,苹果手机软件使用记录怎么查,苹果手机软件用时记录
在使用python异步的时候,我了解了sanic,据说是最快的web服务框架。它支持异步请求处理机制,这意味着你可以使用python3.5 async/await来编写非阻塞的异步程序。
所以我利用业余时间用sanic写了这个项目。
以后这篇文章的所有更新都会直接发在博客上,这里就不更新了:http://blog.howie6879.cn/post/35/.
1.介绍
在使用中,我尽量把程序写得异步,先安装:python -m pip install sanic。
Sanic的文档非常详细,但我在使用它时仍有一些问题。
以下记录的都是我在使用sanic的过程中遇到的问题,后续会继续补充新的问题:1 .蓝图
由2.html模板编写(由jinja2介绍)
3.session(介绍sanic_session)
4.缓存(引入了aiocache)
5.api接口验证(定制装饰器)
6.恶意发送其他附加域到你的网站独立的ip
2.问题记录
蓝图
借用官方文档中的例子,建立一个简单的sanic服务:# main.pyfromsanic从sanic.responseImport JSON导入Sanic。
app=Sanic()@app.route(/)异步定义测试(请求):
返回JSON({ hello : world })# Visit 33580 . 0 . 0:8000/即if _ _ name _ _= _ _ main _ _ :
app.run(主机=0.0.0.0 ,端口=8000)
上面的例子可以算是一个完整的小应用。关于蓝图的概念,可以理解为一个蓝图可以独立完成某项任务,包括模板文件、静态文件和路由,注册多个蓝图就可以构建一个应用。
比如我现在写的项目,我用的是功能架构,如下: server.py
静电
小说
章节. css
content.css
指数. css
main.css
成绩. css
img
bookMark.png
favicon.ico
read_bg.png
阅读_内容. png
js
列表. js
main.js
模板
小说
chapter.html
content.html
donate.html
feedback.html
index.html
main.html
result.html
观点
小说_蓝图. py
如你所见,总模板和静态文件仍然放在一起,但不同的蓝图放在相应的文件夹中。还有一种分区架构,模板、静态等所有文件夹都放在不同的蓝图里。
最后,只需在主启动文件中注册每个单独的蓝图,比如我的项目:# server.py#!/usr/bin/env pythonfrom sanic导入sanic from novels _ search . views . novels _ blue print导入bp
app=Sanic(__name__)
应用蓝图(bp)
app.run(host=0.0.0.0 ,port=8000,debug=True)
具体小说请点击此处_blueprint.py
由2.2.html模板编写
写web服务自然会涉及html。sanic自带html函数,但是这个满足不了一些需求。所以迫切需要引入金甲2,使用方法也很简单:金甲2导入环境中Sanic导入蓝图的#小说_蓝图. py片段,包,select _ autoescape #初始化蓝图并定义静态文件夹路径bp=蓝图(小说_蓝图)
bp.static(/static ,)。/静态/小说)# jinjia2 configenv=环境(
loader=package loader( views . novels _ blue print ,./模板/小说’),
auto escape=select _ auto escape([ html , xml , tpl]))def模板(tpl,**kwargs):
template=env.get_template(tpl)返回html(template.render(kwargs))
@bp.route(/)异步定义索引(请求):
返回模板(“index.html”,title=“index”)
这样就实现了jinja2的引进。
会话
Sanic有一个第三方插件sanic_session,用起来非常简单。见官方示例如下:从Sanic导入asyncio _ redis从Sanic导入Sanic。从Sanic _ session导入再分发接口导入文本的响应。
来自https://github.com/subyraman/sanic_sessionclass雷迪斯的app=Sanic()# Token:
一个简单的包装类,允许您共享一个连接
跨应用程序池。
_pool=无
异步定义get_redis_pool(self):
如果不是自我. pool _池:
自我wait asyncio _ redis .池。创建(
主机=本地主机,端口=6379,池大小=10
)回归自我. pool池
redis=Redis()#将连接池的吸气剂方法传递到session session _ interface=Redis会话接口(Redis。get _ Redis _ pool,expiry=604800)@ app。中间件(请求)异步定义add _ session _ to _ request(请求):
#在每个请求初始化会话之前
#使用客户的请求
等待会话接口。打开(请求)@ app。中间件(响应)异步定义保存会话(请求,响应):
#每次请求保存会话后,
#传递响应以设置客户端饼干
等待会话接口。save(request,response)@app.route(/)异步定义测试(请求):
#像普通字典一样与会话互动
如果不是请求[会话]。get(foo ):
请求[会话][foo]=0
请求[会话][foo]=1
response=text(request[ session ][ foo ])如果_ _ name _ _= _ _ main _ _ ,则返回响应:
app.run(host=0.0.0.0 ,port=8888,debug=True)
2.4.缓存
我在项目中主要使用存储作为缓存,使用aiocache很方便就完成了我需要的功能,当然自己利用阿尔奥勒迪斯编写也不会复杂到哪里去。class @ cached(TTL=1800,cache=RedisCache,key_from_attr=url ,serializer=PickleSerializer(),
ENDPOINT=REDIS _ dict。get( REDIS _ ENDPOINT ,None),PORT=REDIS _ dict。get( REDIS _ PORT ,None),namespace= main )async def cache _ owl look _ novels _ chapter(URL,netloc):
与实现异步ClientSession()作为客户端:
html=await target _ fetch(client=client,url=url)如果html:
soup=BeautifulSoup(html, html5lib )
选择器=规则[网络锁定].如果选择符,则选择符。get( id ,无):
内容=汤。find _ all(id=selector[ id ])elif选择器。get( class ,无):
内容=汤。find _ all(class _=选择器[ class ])否则:
内容=汤。find _ all(选择器。get( tag ))如果其他内容无,则返回字符串(内容)
不返回
带上装饰器,什么都解决了。
API 2.5接口验证
在编写接口的时候,有些接口可能需要在头球中加个验证头或者萨尼克托肯官方貌似并没有提供,解决起来很简单,可以在请求时候进行验证,代码如下:# 比如想验证一个请求的Owllook-Api-Key值是否跟自己约定的值一样,这里写个装饰器就好从函数工具导入包装从sanic .回应导入从从小说_搜索.配置导入AUTHdef验证器(密钥):
:参数键:验证方式Owllook-Api-Key : Maginc密钥,授权:令牌
:返回:返回值
定义包装器(func):@ wrapps(func)
异步定义身份验证(请求,*参数,*kwargs):
value=request.headers.get(key,None) if value和AUTH[key]=值:
response=await func(request,*args,* * kwargs)返回response else:return JSON({ msg : not _ authorized , status :403 })返回authenticate返回包装器
至于使用@ Api _ BP。路线(/BD _小说/)@ authenticator( owl look-Api-Key )async def BD _小说(请求,名称):
及格
具体见例子
2.6.恶意将其他域名绑定到你的网站独立互联网协议(互联网协议的缩写)
前两天突然发现别人没经过我的同意就将自己的域名绑定到我的网站,不能忍,解决办法有不少,web服务器写配置解决,或者代码层面解决,我说下第二种。
首先,定义你允许访问的主持人,再获取访问时获取的主持人,比如:# config。py host=[ 127。0 .0 .1:8001 ]# sanic获取hosthost=请求。标题。get(主机,无)
那么就可以在营业务范围为研发中间件中定义:# 当宿主不满足条件就调到百度@ app。中间件(请求)异步定义添加会话请求(请求):
host=request.headers.get(host ,无)如果不是主机或主机不在主机中:返回重定向(《http://www.baidu.com》)
3.说明
作者:howie6879
链接:https://www。金淑。com/p/28170 a9cd 1d 4