小编jam*_*abi的帖子

访问greenlet里面的flask.g

我正在使用Flask + gevent,并希望在greenlet flask.g的目标函数内访问全局应用程序.我正在使用copy_current_request_context装饰器,其情况与文档中给出的示例非常相似:

import gevent
from flask import copy_current_request_context, g

@app.route('/')
def index():
    g.user_data = 'foobar'
    g.more_user_data = 'baz'

    @copy_current_request_context
    def do_some_work():
        some_func(g.user_data, g.more_user_data)
        ...  

    gevent.spawn(do_some_work)
    return 'Regular response'
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

AttributeError: '_AppCtxGlobals' object has no attribute 'user_data'
Run Code Online (Sandbox Code Playgroud)

我认为在复制请求上下文时会推送新的应用程序上下文?我在烧瓶代码中设置跟踪在这里,这似乎是这样.因此,错误并不令人惊讶,因为该flask.g对象的应用程序上下文的范围为0.10(请参阅http://flask.pocoo.org/docs/0.12/api/#flask.Flask.app_ctx_globals_class).

显然,我可以将用户数据作为参数传递给目标函数:

import gevent
from flask import g

@app.route('/')
def index():
    g.user_data = 'foobar'
    g.more_user_data = 'baz'

    def do_some_work(user_data, more_user_data):
        some_func(user_data, more_user_data)
        ...  

    gevent.spawn(do_some_work, g.user_data, g.more_user_data)
    return 'Regular response'
Run Code Online (Sandbox Code Playgroud)

这很好用,但我希望尽可能使用flask.g.

python gevent flask greenlets

13
推荐指数
1
解决办法
726
查看次数

如何验证Flask应用程序中的URL参数?

我正在Flask中编写一个RESTful API.我可以通过Request Object访问URL参数.验证给定URL参数的最佳方法是什么?

例如:

/places?zip=97239 # This is a valid filter
/places?foo=bar   # This is not a valid filter, 404 response?
Run Code Online (Sandbox Code Playgroud)

一种解决方案是搜索request.args并比较每个条目与一组有效的URL参数.有没有更好的办法?

谢谢!

python rest flask

8
推荐指数
1
解决办法
4889
查看次数

Flask-RESTful 项目结构

这是我正在处理的内容:

/myproject
    README.md
    runserver.py
    /myproject
        __init__.py
        api.py
        /resources
            __init__.py
            foo.py
            bar.py
        /common
            __init__.py
            db.py
    /tests
        test_myproject.py
Run Code Online (Sandbox Code Playgroud)

这里没什么特别的。其中大部分内容可以在Flask-RESTful 用户指南的中级用法页面上找到。

我担心的是循环进口......

api.py

from flask import Flask
from flask_restful import Api

app = Flask(__name__)

from myproject.resources.foo import Foo
from myproject.resources.bar import Bar

api = Api(app)

api.add_resource(Foo, '/Foo', '/Foo/<str:id>')
api.add_resource(Bar, '/Bar', '/Bar/<str:id>')
Run Code Online (Sandbox Code Playgroud)

foo.py

from flask_restful import Resource
from myproject.common.db import query_db


class Foo(Resource):
    def get(self):
        pass
    def post(self):
        pass
Run Code Online (Sandbox Code Playgroud)

数据库.py

from flask import g
import sqlite3
from myproject.api import app


def get_db(): …
Run Code Online (Sandbox Code Playgroud)

python sqlite rest flask flask-restful

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

标签 统计

flask ×3

python ×3

rest ×2

flask-restful ×1

gevent ×1

greenlets ×1

sqlite ×1