1. 在搭建py3的flask虚拟环境时,virtualenv --no-site-packages py3flask
报错:
virtualenv ImportError: cannot import name _remove_dead_weakref
加上了参数–no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。
解决:
virtualenv --no-site-packages -p python3 py3flask
2. 然后,py3flask目录下的子bin目录下有脚本activate,source它,出错
source:读取文件 “py3flask/bin/activate” 时发生错误
Python 3 comes bundled with the venv module to create virtual environments. If you’re using a modern version of Python, you can continue on to the next section.
flask现在支持py3.2版本以上的py3,且推荐使用python3上使用flask。不需要安装virtualenv。
删除virtualenv虚拟环境:
转了一圈,答案是没有,那就rm吧:
cd py3flask
rm -rf ./*
删除virtualenv:
apt-get --purge remove virtualenv
:卸载软件及其配置
1. 查看本机是否有py3环境:
ls /usr/bin/ | grep python
2. python3 -m venv venv
3. sudo apt-get install python3-venv
4. python3 -m venv py3flask
sudo apt-get install python-virtualenv
virtualenv -p /usr/bin/python3 py3flask
. py3flask/bin/activate
pip3 install flask
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
shell:FLASK_APP=hello.py flask run
然后http://127.0.0.1:5000/查看结果
如果其他机器想要访问:FLASK_APP=hello.py flask run --host=0.0.0.0 , 否则程序只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问。
2018/11/13增
在java中,springMVC提供这样的操作。
那么python中呢?
下面的demo_1、2、3都是在“参考[1.]”的基础上做了些修改,增加功能,感谢博主的翻译!
from flask import Flask, jsonify
app = Flask(__name__)
tasks = [
{
'id': 1,
'title': u'json串 1',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'done': False
},
{
'id': 2,
'title': u'json串 2',
'description': u'Need to find a good Python tutorial on the web',
'done': False
}
]
@app.route('/demo_1/api/v1.0/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
if __name__ == '__main__':
# make jsonify support chinese
app.config['JSON_AS_ASCII'] = False # 否则在web端显示的是utf-8的编码,而不是中文(但是不影响接口的读取)
app.run(debug=True)
注意: app.config['JSON_AS_ASCII'] = False
# 否则在web端显示的是utf-8的编码,而不是中文(但是不影响接口的读取)
@app.route('/demo_2/api/v1.0/tasks/' , methods=['GET'])
def get_task(task_id):
task = list(filter(lambda t: t['id'] == task_id, tasks))
if len(task) == 0:
abort(404)
return jsonify({'task': task[0]})
if __name__ == '__main__':
# make jsonify support chinese
app.config['JSON_AS_ASCII'] = False # 否则在web端显示的是utf-8的编码,而不是中文(但是不影响接口的读取)
app.run(debug=True)
报错原因:
python3 中filter返回的filter object是一个迭代器(py2 貌似直接返回字典),修改如下:
task = list(filter(lambda t: t['id'] == task_id, tasks))
from flask import make_response
@app.errorhandler(404)
def not_found(e):
return make_response(jsonify({'error': 'Sorry,Did not find the resources you want to visit.'}), 404)
from flask import render_template
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
注意:如果html文件已经放在位于项目根目录下的templates文件夹下,就直接写文件名即可。
注意:如果上面两种方法同时存在,重定向页面优先。
background:url(/static/img/pic.jpg)
即可先放着,还没有尝试,估计改天单独记录下。这个例子貌似可以借鉴:https://segmentfault.com/q/1010000015174361/a-1020000015826871
[0.] flask
[1.] 博客园: (翻译)使用python的Flask实现一个RESTful API服务器端
[2.] Java调用python restful接口
[3.] Ubuntu16.04安装Postman工具
[4.] 一个很不错的flask视频教程