如何在Flask中验证URL参数

Bal*_*rni 2 python url http-post flask pythonanywhere

这是我使用Flask和Python的第一个应用程序.

我使用以下URL格式从Arduino发送POST请求到在Pythonanywhere服务器实例上运行的烧瓶应用程序.

有效的POST请求:3个URL参数 http://voyagers.pythonanywhere.com/senddata?node=1234&lat=18.5580&lng=73.8075

我需要通过以某种形式验证URL来阻止进一步处理的请求.我希望这可以保护我的应用程序免受未经身份验证的POST请求.

说这样的话:超过3个URL参数 http://voyagers.pythonanywhere.com/senddata?node=324&lat=18.5580&lng=73.8075&a=c&a=d

我怎样才能在Flask中实现这一目标?

还建议,如果有更好的方法可以用于保护未授权请求的应用程序.

gre*_*epe 8

flask如果您愿意从URL参数(即URL中的'?'符号后面的任何内容)切换到路径参数(即PathHTTP头中的任何内容或部件),您可以自动验证参数并自动抛出错误在第一个'/'之后的URL和'?'之前的URL).

您的示例可能如下所示:

@app.route('/post/<int:node_id>/<float:lat>/<float:lng>', methods=['POST'])
def process_post_request(node_id, lat, lng):
    # do some work
    return your_result
Run Code Online (Sandbox Code Playgroud)

然后你可以发送请求到URL,例如: http://example.com/post/1234/-11.45/21.34

你可以在这里找到更多相关信息:http://flask.pocoo.org/docs/0.12/quickstart/#variable-rules

为了保护访问权限,您可以在此处使用一些示例代码段:http://flask.pocoo.org/snippets/category/authentication/

我建议仅限制访问HTTPS并使用基本身份验证,如果你只是玩游戏.这是你可以用这里描述的简单装饰器做的事情:http://flask.pocoo.org/snippets/8/

您将在浏览器中收到一个提示,要求您输入用户名和密码,浏览器会在会话期间记住它.或者,您可以在Authorization标题中以base64编码形式设置用户名和密码:https://en.wikipedia.org/wiki/Basic_access_authentication