标签: flask-restful

如何将模板导入到Flask中templates文件夹的子目录中?

目前我有一个基于flask-restful的API项目,带有使用OpenAPI(Swagger)创建的文档页面。我正在尝试创建一个登录页面,根据我的结构 jinja2 找不到模板的路径。

\n\n

在登录脚本中,我尝试在函数中传递 .html 文件的完整路径render_template(),但没有找到该文件。就像添加参数一样template_folder = path/to/fileapp=Flask(__name__)我没有成功。

\n\n

我的结构:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 auth\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 admin.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 login.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 jwt.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 request.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 utils.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 core.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 db_app_2.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 routes\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 resources.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 templates\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docs\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 swagger.json\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 swagger.yaml\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pages\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 …
Run Code Online (Sandbox Code Playgroud)

jinja2 flask flask-restful

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

使用flask_restful和flask_caching进行循环导入

我在项目中使用flask_restful已经有一段时间了,因为我喜欢将资源分成不同的文件以进行基本组织。现在我想添加flask_caching,但遇到了(简单?)循环导入问题

我的项目结构是这样的

flask_api.py
-resources
--my_resource.py
--my_other_resource.py
--so_many_more_resources.py
Run Code Online (Sandbox Code Playgroud)

my_resources.py 的端点添加到flask_api.py 中,我还在其中创建了flask_cache 缓存对象,如下所示:

# flask_api.py
from flask import Flask
from flask_restful import Api
from flask_caching import Cache
from resources import my_resource
app = Flask(__name__)
cache = Cache(app, config={'sample config'})
api = Api(app)
api.add_resource(my_resource.GetStuff, '/api/v2/stuff/get')
# this file also runs the app
Run Code Online (Sandbox Code Playgroud)

然后我(尝试)将缓存导入到 my_resource.py - 我在其中使用 @cache 装饰器

# resources/my_resource.py
from flask_api import cache
class GetStuff(Resource):
    @cache.memoize(timeout=30)
    def get():
        return "Stuff"
Run Code Online (Sandbox Code Playgroud)

但这会导致可怕的循环导入问题。我可以将所有资源导入夹在该cache = Cache(...)线上方api.add_resource()。然而,这感觉像是一种黑客代码的味道,并且是一个非常非常多肉的三明治。我宁愿将它们全部放在文件的顶部。

解决这个问题的正确方法是什么?(希望不要彻底修改大部分代码库)

tl;dr:flask_api 创建缓存并导入资源 -> 资源无法从flask_api …

python flask flask-restful flask-caching

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

python中的依赖文件

我是Python新手。我正在使用flask-restful 在 python 中创建一个API。我已经在 java 中创建了 API。在 java 中,我们有 pom.xml 文件用于依赖项...是否有用于 python 和 Flask-restful 的文件

python-3.x flask-restful

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

TypeError:Decimal 类型的对象不可 JSON 序列化

TypeError: Object of type Decimal is not JSON serializable


当我运行时,postman api我收到上述错误,因为sales_qty是十进制,我不知道如何decimalfor循环中解析并将其作为 json 返回

from flask import Flask, jsonify

import decimal,json

result= [('V_M_001', 'KITE', 'Napkin', 1, 2, 12, 0, Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')), 
        ('V_M_001', 'KITE', 'Napkin', 2, 4, 34, 5, Decimal('1'), Decimal('4'), Decimal('0'), Decimal('0'))]
        
def fun():

   for i in result:
        data_all.append({
                            "machine_name":i.machine_name,
                            "location":i.location, 
                            "item_name":i.item_name,
                            "row_no":i.row_no,
                            "require_minimum_stk_qty":i.require_minimum_stk_qty,
                            "capacity":i.capacity,
                            "stock_qty":i.stock_qty,
                            "sales_qty":i.sales_qty,
                            "available_qty":i.available_qty,
                            "sales_day_qty":i.sales_day_qty,
                            "sales_week_qty":i.sales_week_qty
        
        })
        
    return jsonify(data_all)

fun()
Run Code Online (Sandbox Code Playgroud)

输出: TypeError: Object of type Decimal is …

python json decimal flask-sqlalchemy flask-restful

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

使用 Restful api 和 Flask 时如何将列表作为参数传递

我正在尝试创建一个 API 来将列表解析为参数,但是我不知道如何继续前进,我遇到了一些错误,我很确定您的专业人士可能会发现其中的错误。

from flask import Flask
from flask_restful import Api, Resource, reqparse

app = Flask(__name__)
api = Api(app)

parser = reqparse.RequestParser()
parser.add_argument('list', type=list)

@app.route('/')
def get():

    ABC = parser.parse_args()
    print(*ABC)
    return ABC

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

这是我的 API 请求

import requests

BASE = "http://127.0.0.1:5000/"

response = requests.get(BASE, [1,2,3])

print (response)
Run Code Online (Sandbox Code Playgroud)

预先感谢您的任何帮助!

python flask-restful

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

如何在请求上下文之外工作时模拟 Flask.g 和 Flask-RESTful.request

我正在为一个模块编写单元测试,该模块用作多个 Flask 项目的 git 子模块。我有一个方法,Flask-RESTful.request假设它作为活动 http 请求的一部分被调用。

\n

core.helpers.auth.py

\n
from flask import g\nfrom flask_restful import request\n\nclass Auth():\n\n    @staticmethod\n    def authenticate(f):\n        def decorated(*args, **kwargs):\n            internalByPass = request.headers.get("by-pass")\n            shouldByPass = False\n            if internalByPass == "internal-bypass-key":\n                shouldByPass = True\n\n            if shouldByPass:\n                g.user = "by_pass"\n                return f(*args, **kwargs)\n\n        return decorated\n
Run Code Online (Sandbox Code Playgroud)\n

我想在测试 Auth.authenticate 方法时进行模拟。\n这是我尝试过的Flask-RESTful.request-flask.g

\n

core.tests.test_helpers.test_auth.py

\n
import pytest\nfrom core.helpers import auth\n\ndef test_authenticate(mocker):\n    mock_flask_request_obj = mocker.patch("core.helpers.auth.request")\n    mock_flask_request_obj.headers.get.return_value = "internal-bypass-key"\n\n    mock_flask_g_obj = mocker.patch("core.helpers.auth.g")\n    \n    @auth.Auth.authenticate\n    def test_func(*args, **kwargs):\n …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking flask flask-restful

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

在flask_restful中flask_jwt_extended CSRF_Token

我只在 cookie 中设置访问令牌。但我在cookies中也发现了CSRF_token。我不明白为什么会发生以及它是如何发生的。

看我的代码:- 设置访问令牌。

     access_token = create_access_token(identity=user.id, fresh=True)
     refresh_token = create_refresh_token(identity=user.id)
     resp=Response.SUCCESS(data={'id': user.id, 'refresh_token': refresh_token})
     set_access_cookies(resp,access_token)
     return resp
Run Code Online (Sandbox Code Playgroud)

饼干

邮递员饼干

当我使用@jwt_requiured((locations=['cookies'],fresh=True) 它时返回Missing CSRF token。在这里,我需要通过 header 传递 CSRF 令牌。有谁知道这里发生了什么?我应该做什么?

python access-token flask-restful flask-jwt-extended csrf-token

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

Flask-Restful忽略了蓝图的url_prefix

我想使用Flask蓝图将Flask-Restful资源组织到单独的url前缀中。无论我设置了什么url前缀(在创建蓝图或注册期间),所有内容都会映射到原始路由路径。如何正确地将Restful与蓝图一起使用?

app = Flask(__name__)
api = Api(app)

api.add_resource(Building, '/<int:id>', endpoint='building')
api.add_resource(Jack, '/<int:id>', endpoint='jack')

building_api = Blueprint('building_api', __name__)
jack_api = Blueprint('jack_api', __name__)

app.register_blueprint(building_api, url_prefix='/buildings')
app.register_blueprint(jack_api, url_prefix='/jacks')
Run Code Online (Sandbox Code Playgroud)

我可以找到的所有文档都说现在应该在/buildings/<int:id>和提供这些文件/jacks/<int:id>,但是这两个URL 404都可以在上访问/<int:id>。对路径进行硬编码add_resource可解决此问题,但失败了url_prefix

python flask flask-restful

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

在RESTful Web服务中,服务器是否可以花费很多分钟来响应?

我正在使用flask-restful开发RESTful Web服务.

客户端需要能够请求服务器执行的作业.这项工作可能需要约1秒至约1小时才能完成.一般来说,预计需要1-5分钟.

作业完成后,客户端需要下载JSON转储.从100KB到100MB的任何地方.

我看到两个选项:

  1. 客户端将作业作为POST请求提交,而服务器的响应仅在作业完成时提供.响应包括JSON转储.
  2. 客户端将作业作为POST请求提交,服务器立即响应200 OK.然后,客户端每隔60秒提交一次GET状态请求.作业完成后,它会提交另一个GET请求来下载JSON转储.

REST原则下哪个选项更受欢迎?

我在选项1中看到的问题是在等待响应时网络中断的可能性.

python rest flask restful-architecture flask-restful

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

方法不允许 - 请求的URL不允许使用该方法

我正在尝试构建一个python flask应用程序,但是当我尝试将表单数据提交给python方法时,我遇到了一个问题.

服务器抛出的问题是"Method Not Allowed".

HTML代码

<h1>Submit the Link</h1>
    <form action="/submit_article" method="POST" name="form">
        <div class="col-md-4 col-md-offset-4">
            {{ form.hidden_tag() }}
            <div class="form-group">
                <label class="control-label" for="description">Name</label>
                {{ form.description }}
            </div>
            <div class="form-group">
                <label class="control-label" for="link">Link</label>
                {{ form.link }}
            </div>
            <button class="btn btn-default" type="submit">Submit</button>
        </div>
    </form>
Run Code Online (Sandbox Code Playgroud)

PYTHON方法(submit_article)

@app.route('/submit_article', methods=['POST'])
def submit_article():
  form = UploadForm()
  if request.method == 'POST':
    data = {
        "_id": form.link.data,
        "description": form.description.data,
        "user": current_user.username,
        "time": datetime.datetime.now()
    }

    try:
        if((app.config['NEWS_COLLECTION'].insert(data))):
            flash("Link added successfully", category="success")
            return redirect(request.args.get("new") or url_for("new"))

    except DuplicateKeyError:
        flash("Article …
Run Code Online (Sandbox Code Playgroud)

python flask flask-wtforms flask-restful

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