支持异步的 python web 框架

tornado

轻量级 flask 框架

flask中文文档

import base64
import random
import io
import time
from flask import Flask, request
from flask_restful import reqparse, abort, Api, Resource
import json
app = Flask(__name__)
api = Api(app) users = {
"magigo":["123456"]
} def gen_token(uid):
token = base64.b64encode(bytes(''.join([str(uid), str(random.random()), str(time.time()+7200)]), encoding='utf-8'))
users[uid].append(token)
return token def verify_token(token):
_token = base64.b64decode(token)
print(str(_token, encoding='utf-8'))
if not users.get(str(_token, encoding='utf-8').split(':')[0])[-1] == token:
return -1
if float(_token.split(':')[-1]) >= time.time():
return 1
else:
return 0 @app.route('/login', methods=['POST', 'GET'])
def login():
auth = request.headers['Authorization'].split(' ')[-1]
print('Authorization:\n',auth)
uid, pw = str(base64.b64decode(auth), encoding='utf-8').split(':')
print(uid)
if users.get(uid)[0] == pw:
return gen_token(uid)
else:
return 'error' @app.route('/test', methods=['POST', 'GET'])
def test():
token = request.args.get('token')
if verify_token(token) == 1:
return 'data'
else:
return 'invalid state!' @app.route('/nlp/result/<queryString>', methods=['POST','GET'])
def get_nlp_result(queryString):
print(queryString)
result = dict(a='a',b='b')
return json.dumps(result,ensure_ascii=False,indent=4) parser = reqparse.RequestParser()
parser.add_argument('queryString',type=str)
class NLP_Result(Resource): def post(self):
args = parser.parse_args()
print(args)
return dict(a='a', b='b') def get(self):
self.post() api.add_resource(NLP_Result,'/nlp/queryResult') if __name__ == '__main__':
app.run(debug=True,host='192.168.5.3') import requests def query_nlp_result(queryString):
response = requests.get('http://192.168.5.3:5000/nlp/result/{}'.format(queryString))
print(response.content.decode()) def login_req():
response = requests.get('http://192.168.5.3:5000/login', auth=('magigo','123456'))
print(response.text) def verify_test():
token = 'bWFnaWdvMC41OTAyODkzODc4MDg4MTA4MTU2NjMyNjg0OC4zODU3NDI3'
response = requests.get('http://192.168.5.3:5000/test',params={'token':token})
print(response.text)
if __name__ == '__main__':
# query_nlp_result('how are you!')
verify_test()
login_req() # 今日踩坑, flask 为何 端口占用不提示呀呀呀呀呀!!! damn!!!
netstat -ano|findstr "5000"
taskkill /pid 5000

使用 pipenv 进行包管理

常用参数及命令一览
1 pipenv --where 列出本地工程路径
2 pipenv --venv 列出虚拟环境路径
3 pipenv --py 列出虚拟环境的Python可执行文件
4 pipenv install 安装包(创建虚拟环境)
5 pipenv install moduel --dev 在开发环境安装包
6 pipenv graph 查看包依赖
7 pipenv lock 生成lockfile
8 pipenv install --dev 安装所有开发环境包
9 pipenv uninstall --all 卸载所有包
10 pipenv --rm 删除虚拟环境 1 . cd yourproj Pipfile ####################
[[source]]
url = "https://mirrors.aliyun.com/pypi/simple"
verify_ssl = true
name = "aliyun" [dev-packages] [packages] cymysql = "*"
Flask-Cors = "*"
Flask-HTTPAuth = "*"
Flask-SQLAlchemy = "*"
Flask-WTF = "*"
requests = "*" [requires]
python_version = "3.6" ################# [[source]]
url = "https://pypi.douban/simple"
verify_ssl = true
name = "douban" [dev-packages] [packages]
requests = {version="*", index="douban"}
maya = {version="*", index="aliyun"}
records = "*" pipenv install # 安装完成之后呢执行 pipenv graph 查看安装结果 pipenv graph pipenv --venv # 查看 虚拟环境名称,在 pycharm 里要使用到

成熟企业级 Django 框架

python 框架的更多相关文章

  1. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

  2. Python框架、库以及软件资源汇总

    转自:http://developer.51cto.com/art/201507/483510.htm 很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世 ...

  3. android模拟器(genymotion)+appium+python 框架执行基本原理(目前公司自己写的)

    android模拟器(genymotion)+appium+python 框架执行的基本过程: 1.Push.initDate(openid)方法     //业务数据初始化 1.1   v5db.p ...

  4. 10个用于Web开发的最好 Python 框架

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  5. 第六篇:web之python框架之django

    python框架之django   python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...

  6. Python框架之Django学习

    当前标签: Django   Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0     Python框架之Django学习笔记(十三) 尛 ...

  7. Hadoop的Python框架指南

    http://www.oschina.NET/translate/a-guide-to-Python-frameworks-for-Hadoop 最近,我加入了Cloudera,在这之前,我在计算生物 ...

  8. 【python】Python框架、库和软件资源大全

    很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世界各地的程序员们都能够贡献他们的代码与创新. Python就是这样一门受到全世界各地开源社区支持的语言. ...

  9. Python框架之Django的相册组件

    Python框架之Django的相册组件 恩,没错,又是Django,虽然学习笔记已经结贴,但是学习笔记里都是基础的,Django的东西不管怎么说还是很多的,要学习的东西自然不会仅仅用十几篇博文就能学 ...

  10. 10款Web开发最佳的Python框架

    Python是跻身于当代IT世界最流行和代码最高效的编程语言之一.Python框架能帮助你快速启动Web应用. 1.CubicWeb CubicWeb的最重要的功能是其代码的可重用性,由一个个代码单元 ...

随机推荐

  1. scrapy项目2:爬取智联招聘的金融类高端岗位(spider类)

    ---恢复内容开始--- 今天我们来爬取一下智联招聘上金融行业薪酬在50-100万的职位. 第一步:解析解析网页 当我们依次点击下边的索引页面是,发现url的规律如下: 第1页:http://www. ...

  2. 解决vuex保存的数据刷新页面时清空

    参考文章: vuex中store保存的数据,刷新页面会清空 主要解决代码: 1.更改store文件下index文件state的定义 const store = new Vuex.Store({ sta ...

  3. [BZOJ4010]:[HNOI2015]菜肴制作(拓扑排序)

    题目传送门 题目描述 知名美食家小A被邀请至ATM大酒店,为其品评菜肴. ATM酒店为小A准备了N道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间 ...

  4. Docker容器技术入门

    独立容器分开的条件: 1.Namespace命名空间 1.主机名和域名,UTS 2.文件系统,mount 3.进程间通信,IPC 4.独立的进程树PID 5.独立的用户User 6.独立的IP地址tc ...

  5. Hibernate一级缓存之懒加载问题

    Hibernate的懒加载: 当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性. 目的,为提高程序执行效率. 查询操作:get()方法/load()方法 (1)get()方法,及时 ...

  6. 【洛谷P2016战略游戏】

    树形dp的经典例题 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的 ...

  7. 设计模式(5): vue 不监听绑定的变量

    概述 最近最近做项目的时候总会思考一些大的应用设计模式相关的问题,我把自己的思考记录下来,供以后开发时参考,相信对其他人也有用. 绑定变量 一般情况下,如果我们需要在组件中使用某个变量,会这么使用: ...

  8. 用apicloud+vue的VueLazyload实现缓存图片懒加载

    <script src="../../script/vue-lazyload.js"></script><img v-lazy="remot ...

  9. Linux下安装redis-4.0.10

    1.下载redis-4.0.10 在redis官网(https://redis.io/download)下载redis-4.0.10 2.将安装包上传至Linux服务器 在Linux服务器根目录下创建 ...

  10. C# sqlite 无法识别的datetime格式 FromOADate

    再读取不可控数据库datetime字段时,遇到了一个奇葩问题——“无法识别的datetime格式” 搞了半天…… 数据库里看:2017-06-06 10:28:30.000 不做处理查询报错:“无法识 ...