让我们假设我使用一个小型 Flask 应用程序向办公室的同事提供数据,并假设这是一个我没有明确“付费”的项目,所以我没有时间来写代码。
在我在家中对宠物项目进行实验时,我突然@app.route('/some/local/page')
想到,我可以做以下事情,而不是用它来装饰每条最后的路线:
from flask import Flask, render_template, url_for, redirect, abort
from collections import OrderedDict
goodURLS = OrderedDict([('/index','Home'), ##can be passed to the template
('/about', 'About'), ##to create the navigation bar
('/foo', 'Foo'),
('/bar', 'Bar'), ##hence the use of OrderedDict
('/eggs', 'Eggs'), ##to have a set order for that navibar
('/spam', 'Spam')])
app = Flask(__name__)
@app.route('/<destination>')
def goThere(destination):
availableRoutes = goodURLS.keys():
if "/" + destination in availableRoutes:
return render_template('/%s.html' % destination, goodURLS=goodURLS)
else:
abort(404)
@app.errorhandler(404)
def notFound(e):
return render_template('/notFound.html'), 404
现在我需要做的就是更新我的一个列表,我的导航栏和路线处理功能都是同步的。
或者,我编写了一种方法来确定可行的文件位置,方法os.walk
是结合使用file.endswith('.aGivenFileExtension')
来定位我想要访问的每个文件。然后可以将用户的请求与此函数返回的列表进行比较(这显然会改变serveTheUser()
函数。
from os import path, walk
def fileFinder(directory, extension=".html"):
"""Returns a list of files with a given file extension at a given path.
By default .html files are returned.
"""
foundFilesList = []
if path.exists(directory):
for p, d, files in walk(directory):
for file in files:
if file.endswith(extension):
foundFilesList.append(file)
return foundFilesList
goodRoutes = fileFinder('./templates/someFolderWithGoodRoutes/')
问题是,这很糟糕吗?
Flask 的许多方面我只是没有使用(主要是因为我还不需要了解它们) - 所以与 Flask 的内置功能相比,这实际上可能是限制性的,或者是多余的。我没有明确地装饰每条路线是否会剥夺我 Flask 的一个重要功能?
此外,这两种方法中的任何一种比另一种更安全还是更不安全?我真的不太了解网络安全——就像我说的,现在这都是办公室里的东西,我的数据的安全性由我们的 IT 专业人员保证,没有来自办公室外的请求——但是在现实世界的环境,这其中任何一个都会有害吗?特别是,如果我将后端使用到os.walk
服务器本地磁盘上的某个位置,我并不是要求它被一些不好的人滥用,不是吗?
编辑:我将其作为赏金提供,因为如果这不是一种安全或建设性的做法,我想避免将其用于我想要推送到 Heroku 或一般公开为家人服务的事情,等等。似乎装饰每条可行的路线app.route
都是浪费时间。