我正在编写一个小API,并希望打印所有可用方法的列表以及相应的"帮助文本"(来自函数的docstring).从这个答案开始,我写了以下内容:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api', methods = ['GET'])
def this_func():
"""This is a function. It does nothing."""
return jsonify({ 'result': '' })
@app.route('/api/help', methods = ['GET'])
"""Print available functions."""
func_list = {}
for rule in app.url_map.iter_rule():
if rule.endpoint != 'static':
func_list[rule.rule] = eval(rule.endpoint).__doc__
return jsonify(func_list)
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
这样做有更好 - 更安全的方式吗?谢谢.
我正在使用正则表达式创建大量Flask路由.我想要进行单元测试,检查是否存在正确的路由以及错误的路由404.
这样做的一种方法是启动本地服务器并使用urllib2.urlopen等.但是,我希望能够在Travis上运行这个测试,我假设这不是一个选择.
我还有另一种方法可以在我的应用程序上测试路线吗?
我正在用Python构建一个网站(使用heroku),我想创建一个"最新的提交"部分.也就是说,当我@app.route(blah)在我的Python应用程序中创建一个新的时,我希望在我的主页上的"最新提交"部分下显示新页面的链接.
这可能吗?
编辑:这是我的代码
import os
import json
from flask import Flask, render_template, url_for
from werkzeug.routing import Map, Rule, NotFound, RequestRedirect, BaseConverter
app = Flask(__name__)
@app.route('/')
def index():
return render_template('welcome.html')
@app.route('/about', endpoint='about')
def index():
return render_template('about.html')
@app.route('/contact', endpoint='contact')
def index():
return render_template('contact.html')
@app.route('/all-links', endpoint='all-links')
def all_links():
links = []
for rule in app.url_map.iter_rules():
url = url_for(rule.endpoint)
links.append((url, rule.endpoint))
return render_template('all_links.html', links=links)
if __name__ == '__main__':
# Bind to PORT if defined, otherwise default to 5000.
port = int(os.environ.get('PORT', 5000)) …Run Code Online (Sandbox Code Playgroud) 我遇到了Flask的问题,其中导入模块中声明的路由没有注册,总是产生404.我在Python 2.7上运行最新版本的Flask.
我有以下目录结构:
run.py具有以下代码:来自flask导入Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
import views.home
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
home.py具有以下代码:
from run import app
@app.route('/test')
def test():
return "test"
Run Code Online (Sandbox Code Playgroud)
当我运行run.py在home.py(http:// localhost:5000/test)中声明的路由时,即使run.py导入也总是返回404 views.home.声明的根视图(http:// localhost:5000)run.py工作正常.
我编写了一个函数,打印出所有已注册的路由和/ test不在那里(获取应用程序中定义的所有路由的列表).
知道为什么吗?
我使用 Flask 创建了一个简单的 API,我的问题是如何让它列出已分配的所有资源或端点
from flask import Flask, request
from flask_restful import Resource, Api
from sqlalchemy import create_engine
from json import dumps
import os, random
app = Flask(__name__)
api = Api(app)
class cuddle(Resource):
def get(self):
file = random.choice(os.listdir("/path/to/dir/of/images"))
out = "https://example.com/path/" + file
return out
api.add_resource(cuddle, '/api/cuddle')
if __name__ == '__main__':
app.run(host="0.0.0.0", port=33, debug=True)
Run Code Online (Sandbox Code Playgroud)
我希望能够访问example.com/api/endpoints并列出所有可用的端点,例如在代码片段中cuddle