我正在使用Python和Flask设计RESTful API.正如所料,如果一切顺利,API需要接收API请求并返回数据,但在错误的情况下,它需要轻微失败并返回正确的错误.我通常在出现错误时引发异常,但在这种情况下,我需要将错误消息返回给用户(try-catch块?).
我目前处理错误的方法是让我的函数返回数据和错误,并检查每个级别的数据,最后将数据或错误返回给API函数的调用者.
这样做的问题是,当存在多个级别的函数调用时,它会变得很麻烦,需要我的函数多次传递数据和错误,并且每次都执行检查.
有一个更好的方法吗?我可以做些什么改进使错误传播更简单和优雅?
以下是我当前返回错误的示例:
def get_data()
data1, error = get_some_data() # function not shown
if data1 is None:
return None, "could not retrieve data1"
data2, error = get_some_other_data() # function not shown
if data2 is None:
return None, "could not retrieve data2"
return (data1, data2), None
@app.route("/api/method", methods=['GET'])
def method():
data, error = get_data()
if data is None:
if error is None:
error = "unknown error"
return json.dumps({ "error": error }), 500
return json.dumps({ "data": data }), 200
Run Code Online (Sandbox Code Playgroud) 使用AngularJS应用程序提供正确404的最佳方法是什么?
一点背景:我正在构建一个Angular应用程序,并选择使用
$locationProvider.html5Mode(true);
Run Code Online (Sandbox Code Playgroud)
因为我希望网址显得自然(并且与多页"传统"网络应用无法区分).
在服务器端(一个简单的Python Flask应用程序),我有一个全能的处理程序,可以将所有内容重定向到角度应用程序:
@app.route('/', defaults={'path': ''})
@app.route('/<path>')
def index(path):
return make_response(open('Ang/templates/index.html').read())
Run Code Online (Sandbox Code Playgroud)
现在,我正在试图弄清楚如何处理404错误.我见过的大多数Angular应用程序都执行以下操作:
.otherwise({ redirectTo: '/' })
Run Code Online (Sandbox Code Playgroud)
这意味着他们无法提供适当的404.
但是,我更愿意返回一个正确的404,带有404状态代码(主要用于搜索引擎优化目的).
使用Angular处理404s的最佳方法是什么?我不应该担心它并坚持一个全能的?或者我应该删除catch-all并在服务器端提供正确的404?
编辑清楚
javascript flask http-status-code-404 angularjs angularjs-routing
我正在使用 asp.net 构建一个页面。我有一个包含文本框和提交按钮的表格的表单。提交表单时,我想抓取输入到文本框中的所有文本并对其进行操作。为此,我有以下方法:
protected void Button1_Click(object sender, EventArgs e)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (Control c in this.Controls)
{
if (c.GetType().Name == "TextBox")
{
TextBox tb = (TextBox)c;
sb.AppendLine(tb.Text);
}
}
Label1.Text = sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
问题在于控件显然不包含我的任何文本框。当我遍历控件并打印出它们的名称时,我得到的唯一一个是“site_master”。(我还尝试了 Controls 和 Page.Controls 而不是 this.Controls)。
我的迭代器有问题吗?是否有另一种方法可以迭代表或页面中的所有文本框?实现这一目标的最佳方法是什么?
我目前正在尝试在Python 2.7.1和Django 1.3之上设置pinax.
对于前几个步骤,需要使用以下命令设置virtualenv:
$ virtualenv mysite-env
$ source mysite-env/bin/activate
(mysite-env)$
我执行第一个命令,它创建一个mysite-env目录,但是出现以下错误:
mysite-env/bin/python中的新python可执行文件
错误[Errno 2]执行命令时没有这样的文件或目录install_name_tool -change /Library/Frameworks/.../Versions/2.7/Python @executable_path /../.Python mysite -env/bin/python
无法调用install_name_tool - 必须安装Apple的开发工具Traceback(最近一次调用最后一次):
文件"/Library/Frameworks/Python.framework/Versions/2.7/bin/virtualenv",第8行,在
load_entry_point('virtualenv == 1.6','console_scripts','virtualenv')()
文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/virtualenv.py",第745行,在主
提示符= options.prompt)
文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/virtualenv.py",第836行,在create_environment
site_packages = site_packages中, clear = clear))
文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/virtualenv.py",第1098行,在install_python中
py_executable])
文件"/ Library/Frameworks/Pyth on.framework/Versions/2.7/lib/python2.7/site-packages/virtualenv.py",第778行,在call_subprocess中
cwd = cwd,env = env)
文件"/Library/Frameworks/Python.framework/Versions/2.7 /lib/python2.7/subprocess.py",第672行,__ init __ errread,errwrite)
文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py",行1202,在_execute_child中
引发child_exception
OSError:[Errno 2]没有这样的文件或目录
执行第二个命令不起作用(考虑到第一个失败,这是有道理的):
bash:mysite-env/bin/activate:没有这样的文件或目录
我已经读过其他有类似问题的人.
在另一个帖子中,有人提到Virtualenv在10.6上有一个错误.
在Google群组中,另一个人为Virtualenv 1.3.3提供了补丁.
在这一点上,我最好的选择是什么?我应该安装Virtualenv 1.3.3并尝试补丁(我知道它不适用于1.6),或者我应该尝试使其适用于我当前的版本?有没有替代Virtualenv我可以使用(请记住我受到pinax设置的限制).
感谢帮助.
flask ×2
python ×2
angularjs ×1
api ×1
asp.net ×1
c# ×1
django ×1
html ×1
javascript ×1
macos ×1
python-2.7 ×1
virtualenv ×1