目前我有一个基于flask-restful的API项目,带有使用OpenAPI(Swagger)创建的文档页面。我正在尝试创建一个登录页面,根据我的结构 jinja2 找不到模板的路径。
\n\n在登录脚本中,我尝试在函数中传递 .html 文件的完整路径render_template(),但没有找到该文件。就像添加参数一样template_folder = path/to/file,app=Flask(__name__)我没有成功。
我的结构:
\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) 我在项目中使用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-restful 在 python 中创建一个API。我已经在 java 中创建了 API。在 java 中,我们有 pom.xml 文件用于依赖项...是否有用于 python 和 Flask-restful 的文件
TypeError: Object of type Decimal is not JSON serializable当我运行时,postman api我收到上述错误,因为sales_qty是十进制,我不知道如何decimal在for循环中解析并将其作为 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 …
我正在尝试创建一个 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)
预先感谢您的任何帮助!
我正在为一个模块编写单元测试,该模块用作多个 Flask 项目的 git 子模块。我有一个方法,Flask-RESTful.request假设它作为活动 http 请求的一部分被调用。
core.helpers.auth.py:
\nfrom 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\nRun Code Online (Sandbox Code Playgroud)\n我想在测试 Auth.authenticate 方法时进行模拟。\n这是我尝试过的Flask-RESTful.request-flask.g
core.tests.test_helpers.test_auth.py
\nimport 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) 我只在 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
我想使用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。
我正在使用flask-restful开发RESTful Web服务.
客户端需要能够请求服务器执行的作业.这项工作可能需要约1秒至约1小时才能完成.一般来说,预计需要1-5分钟.
作业完成后,客户端需要下载JSON转储.从100KB到100MB的任何地方.
我看到两个选项:
REST原则下哪个选项更受欢迎?
我在选项1中看到的问题是在等待响应时网络中断的可能性.
我正在尝试构建一个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) flask-restful ×10
python ×8
flask ×6
access-token ×1
csrf-token ×1
decimal ×1
jinja2 ×1
json ×1
mocking ×1
python-3.x ×1
rest ×1
unit-testing ×1