支持异步的 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. onload,domcontentload区别+onload详解

    todo onLoad是的在页面所有文件加载完成后执行 DomContentLoad是Dom加载完成后执行,不必等待样式脚本和图片加载 domContentLoad更为合理, 原理: 如果是webki ...

  2. Mac ssh key生成

    转载https://blog.csdn.net/wangjunling888/article/details/51115659 1. 查看秘钥是否存在 打开终端查看是否已经存在SSH密钥:cd ~/. ...

  3. sso单点登录原理详解

    sso单点登录原理详解     01 单系统登录机制    1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务 ...

  4. vim系统剪切板

    原文地址 1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某 ...

  5. python学习笔记:(二)基本数据类型

    python中的变量不需要声明,每个变量中使用前都必须赋值,变量赋值以后该变量才会被创建. 在python中变量就是变量,他没有类型,我们所说的类型是变量所指的内存中对象的类型. python3中有六 ...

  6. .Net 逆向 Reflector之reflexil使用

    网上下载了一款商用的教育培训类软件,是用.Net写的,标榜的是免费的,但是只能试用一个月,商家很精明,用此方法推广招揽客户,但是公司在这一块却没有预算购买,一开始就想着既然是商用软件,安全机制做的肯定 ...

  7. Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂

    摘要: Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生. mybatis-plus与mybatis myba ...

  8. ES6标准入门 第五章:数值的扩展

    1.二进制和八进制数值表示法 二进制前缀:0b(或0B):   八进制前缀:0o(或0O). 注意:ES5的严格模式 和 ES6中不再允许使用 0  表示八进制. 将二进制和八进制数值转换为十进制数值 ...

  9. LeetCode算法题-Goat Latin Easy(Java实现)

    这是悦乐书的第322次更新,第344篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第192题(顺位题号是824).给出句子S,由空格分隔的单词组成.每个单词仅由小写和大写 ...

  10. Java多线程学习——join方法的使用

    join在线程里面意味着“插队”,哪个线程调用join代表哪个线程插队先执行——但是插谁的队是有讲究了,不是说你可以插到队头去做第一个吃螃蟹的人,而是插到在当前运行线程的前面,比如系统目前运行线程A, ...