小编pig*_*fly的帖子

如何重定向到烧瓶蓝图父级?

假设我有以下结构:

/root/user/login
Run Code Online (Sandbox Code Playgroud)

我在蓝图中登录:

  app.register_blueprint(login_blueprint,url_prefix=prefix('/user'))
Run Code Online (Sandbox Code Playgroud)

我可以重定向到".index":

@login_blueprint.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        #### this redirects me to '/root/user/'
        redirect_to_index= redirect(url_for('.index'))
        response = current_app.make_response(redirect_to_index)
        # do the log in
     return response

    redirect_to_index=redirect(url_for('.index'))

    response = current_app.make_response(redirect_to_index)
Run Code Online (Sandbox Code Playgroud)

重定向带我到/root/user:

redirect(url_for('.index'))
Run Code Online (Sandbox Code Playgroud)

但是如何到达/root(相对于当前的url(..)是多少?

python flask

4
推荐指数
1
解决办法
5591
查看次数

如何在Flask中获取HTTP版本

我希望获得HTTP版本,例如'HTTP/1.1','HTTP/1.0'.我检查了所有var in request,但一无所获.

['__class__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_file_stream', '_get_stream_for_parsing', '_is_old_module', '_load_form_data', '_parse_content_type', 'accept_charsets', 'accept_encodings', 'accept_languages', 'accept_mimetypes', 'access_route', 'application', 'args', 'authorization', 'base_url', 'blueprint', 'cache_control', 'charset', 'close', 'content_encoding', 'content_length', 'content_md5', 'content_type', 'cookies', 'data', 'date', 'dict_storage_class', 'disable_data_descriptor', 'encoding_errors', 'endpoint', 'environ', 'files', 'form', 'form_data_parser_class', 'from_values', 'full_path', 'get_data', 'get_json', 'headers', 'host', 'host_url', 'if_match', 'if_modified_since', 'if_none_match', 'if_range', 'if_unmodified_since', 'input_stream', 'is_multiprocess', 'is_multithread', 'is_run_once', 'is_secure', 'is_xhr', 'json', 'list_storage_class', 'make_form_data_parser', 'max_content_length', 'max_form_memory_size', 'max_forwards', …
Run Code Online (Sandbox Code Playgroud)

python flask

4
推荐指数
1
解决办法
1609
查看次数

两个Flask应用程序同时进行

我需要在浏览器中同时测试两个Flask应用程序.按标准,Flask在localhost:5000中运行应用程序.因此,一个好的选择是改变其中一个应用程序的地址.那可能吗?如果是这样,怎么办?

python flask

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

模板中的龙卷风渲染参数

我觉得我把它变成了龙卷风,而且它的状态很差。目标是将错误消息放入模板中。此错误消息只需要在一个处理程序中(负责同一页面)。

模板行:

{% if errormsg is not None %}
<div class="alert-warning">{{ errormsg }}</div>
{% end %}
Run Code Online (Sandbox Code Playgroud)

相关的处理程序部分:

if auth:
  self.set_current_user(username)
  self.redirect(self.get_argument("next",u"/"))
else:
  self.errormsg = "Login Failed"
  self.render("login.html", errormsg=self.errormsg)
Run Code Online (Sandbox Code Playgroud)

此时,当 errormsg 未设置为某些内容时,我在页面上收到全局命名空间错误消息。

NameError: global name 'errormsg' is not defined
Run Code Online (Sandbox Code Playgroud)

我发现的解决方法是在我的 BaseHandler 中使用全局渲染函数(我不喜欢这一点):

def render(self, template, **kwargs):
  if hasattr(self, 'errormsg'):
    kwargs['errormsg'] = self.errormsg
  else:
    kwargs['errormsg'] = None
  super(BaseHandler, self).render(template, **kwargs)
Run Code Online (Sandbox Code Playgroud)

这基本上现在将 errormsg 添加到每个渲染中。有没有正确的方法来做到这一点,不会与全局渲染功能混淆?

谢谢!


编辑:

因为我实际上试图做的是将不同/多个非标准 kwargs 参数传递给继承的处理程序,所以我实际上真的认为我正在寻找一种更好的方法来测试,在这种情况下,是在模板上下文中的 errormsg。

{% if 'errormsg' in globals() %}
Run Code Online (Sandbox Code Playgroud)

这仍然感觉很糟糕,因为这个问题是第一次在使用龙卷风时实际出现全局变量。

我确实喜欢扩展渲染来为所有继承的处理程序设置 kwargs 默认值(它实际上是做什么的)。我认为这也可能类似于 self.current_user 的工作方式。

python tornado

3
推荐指数
1
解决办法
3456
查看次数

flask url_for() 将参数视为查询字符串

因为 'code' 是下面 MethodView 类 C 的 get 方法的参数,所以当我调用 url_for('c', code='O7A') 时,我希望得到的 url 是:/c/O7A

我看到的不是预期值,而是:/c/?code=O7A

from flask import Flask, url_for
from flask.views import MethodView

app = Flask(__name__)


class B(MethodView):

    def get(self):
        return 'ok'

    def post(self):
        print url_for('c', code='O7A')
        return 'ok'

app.add_url_rule('/b',
                 view_func=B.as_view('b'),
                 methods=['GET', 'POST'])

class C(MethodView):

    def get(self, code):
        return 'ok'

    def post(self):
        return 'ok'

app.add_url_rule('/c/<code>',
                 view_func=C.as_view('c'),
                 methods=['GET'])
app.add_url_rule('/c/',
                 view_func=C.as_view('c'),
                 methods=['POST'])

print app.url_map

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

python flask

3
推荐指数
1
解决办法
3244
查看次数

如何从Flask中的不同蓝图调用方法?

我有一个带有多个蓝图模块的应用程序.

我想从一个不同的蓝图路线中调用通常会返回视图或渲染模板的方法(路径).

怎么能正确完成?

谢谢.

python flask

3
推荐指数
1
解决办法
5353
查看次数

flask abort()里面的try块行为

当我想在try块中使用烧瓶中止时,我最终会进入我的异常块

@app.route('/newsletters/<int:newsletter_id>', methods=['GET'])
def route_get_newsletter(newsletter_id):
    if request.method == 'GET':        
        try:
            newsletter = get_newsletter(newsletter_id)                
            if not newsletter:
               abort(404)
        except Exception, ex:
            logging.exception("Something awful happened!")
            abort(500)
        else:            
            return jsonify(newsletter=newsletter)
Run Code Online (Sandbox Code Playgroud)

给出输出:

ERROR:root:Something awful happened!
Traceback (most recent call last):
 File "natuurpuntapi.py", line 210, in route_get_newsletter
   abort(404)
 File "/usr/lib/python2.7/dist-packages/werkzeug/exceptions.py", line 525, in __call__
   raise self.mapping[code](*args, **kwargs)
NotFound: 404: Not Found
Run Code Online (Sandbox Code Playgroud)

和werkzeug NotFound被调用,我得到了500响应

当我把中止(404)放在try:block之外时,它可以工作,我得到了404响应

  • 编辑

我发现烧瓶abort()使用werkzeug abort(),这是一个名为Aborter()的类,当它被调用时,它会引发"raise self.mapping [code](*args,**kwargs)"

这是否意味着我不能在我自己的try块中调用abort,因为它会引发异常并最终出现在我的异常中?

python flask

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

如何使用Flask从服务器删除文件

当我使用此功能上传文件时:

@app.route('/add_item', methods=['GET', 'POST'])
@login_required
def new_item():
    error = None
    form = AddItemForm(request.form)
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename) and form.name.data != "" and form.description.data != "":
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOADED_ITEMS_DEST'], filename))
            new_item = Item(
                filename,
                form.name.data,
                form.description.data,
                form.price.data,
                form.age.data,
                form.particles.data,
                form.category.data,
                '1',
                )
            db.session.add(new_item)
            db.session.commit()
            return redirect(url_for('admin_items'))
        else:
            return render_template('admin_items.html', form=form, error=error)
    if request.method == 'GET':
        return redirect(url_for('admin_items'))
Run Code Online (Sandbox Code Playgroud)

如何使用删除项目的功能删除此上传的文件?问题是我当前具有的功能仅删除项目的内容(描述,价格等),但是上传至文件夹的实际文件当然不会被删除!这就产生了问题!

这是我的删除功能:

# Delete Items:
@app.route('/delete_item/<int:item_id>/', methods=['GET', 'POST'])
@login_required
def delete_item(item_id):
    new_id = item_id
    os.remove(os.path.join(app.config['UPLOADED_ITEMS_DEST'], filename)) …
Run Code Online (Sandbox Code Playgroud)

python flask

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

我怎样才能使龙卷风日志功能工作?

我用它来设置我的日志,但没有用。

tornado.options.options['log_file_prefix'].set('/opt/logs/my_app.log')
tornado.options.parse_command_line()
Run Code Online (Sandbox Code Playgroud)

得到这个错误

    tornado.options.options['log_file_prefix'].set('/logs/my_app.log')
TypeError: 'OptionParser' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

我希望将日志打印在终端和日志文件上,并且我通过 xml 配置文件而不是直接通过命令行启动我的应用程序,我该怎么做?

python tornado

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

Python从目录Error获取所有文件

我有一个包含22个.sgm格式文件的文件夹.我想读取所有文件.我将传递的命令行参数的输入将如下所示

/usr/local/pub/tmh/Reuters/*.sgm

所以这应该读取文件夹中的所有sgm格式文件.

我编写的使用python 3.4.2的代码是

allfiles=(glob.glob(sys.argv[1]))
print(allfiles)
Run Code Online (Sandbox Code Playgroud)

现在我得到的是1个文件 /usr/local/pub/tmh/Reuters/reut2-000.sgm.其余的没有被glob选中.此外,我试图打印应打印此参数,/usr/local/pub/tmh/Reuters/*.sgm但它打印/usr/local/pub/tmh/Reuters/reut2-000.sgm(这是文件夹中的第一个文件)

python file

0
推荐指数
1
解决办法
61
查看次数

标签 统计

python ×10

flask ×7

tornado ×2

file ×1