小编Rya*_*yan的帖子

使用Python和Flask返回API错误消息

我正在使用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)

python api error-handling flask

47
推荐指数
1
解决办法
5万
查看次数

AngularJS和处理404错误

使用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

45
推荐指数
2
解决办法
4万
查看次数

使用 asp.net 迭代文本框

我正在使用 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)。

我的迭代器有问题吗?是否有另一种方法可以迭代表或页面中的所有文本框?实现这一目标的最佳方法是什么?

html c# asp.net

5
推荐指数
1
解决办法
6285
查看次数

在Mac OS X 10.6.7,Python 2.7.1上运行Virtualenv 1.6时

我目前正在尝试在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设置的限制).

感谢帮助.

python django macos virtualenv python-2.7

2
推荐指数
1
解决办法
1162
查看次数