在类似问题的互联网上找到一两个人,但没有看到任何地方发布的解决方案.我从下面的代码/模板中得到了构建错误,但无法确定问题的位置或原因.似乎模板没有识别该功能,但不知道为什么会发生这种情况.任何帮助将不胜感激 - 现在已经敲了两下我的键盘.
功能:
@app.route('/viewproj/<proj>', methods=['GET','POST'])
def viewproj(proj):
Run Code Online (Sandbox Code Playgroud)
...
模板摘录:
{% for project in projects %}
<li>
<a href="{{ url_for('viewproj', proj=project.project_name) }}">
{{project.project_name}}</a></li>
{% else %}
No projects
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
错误日志:https: //gist.github.com/1684250
编辑:还想包括它在构建URL时没有识别变量"proj",所以它只是将值附加为参数.这是一个例子:// myproject/viewproj?projname = what + up
最后几行:
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/srv/www/myproject.com/myproject/templates/layout.html", line 103, in top-level template code, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] {% block body %}{% endblock %}, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 …Run Code Online (Sandbox Code Playgroud) 我的应用程序依赖于request.remote_addr这是None当我运行通过使用nosetests测试app.test_client().post('/users/login', ....).
当我运行测试时,如何模拟IP(127.0.0.1正常工作)? 我已经尝试设置环境变量,使用post()方法发送头文件,我已经通过nosetests,werkzeugs和flaskks文档进行了挖掘,但我尝试过的任何工作都没有.
我正在使用使用Python的Flask(基于Werkzeug).
用户可以下载文件,我正在使用send_from_directory-function.
但是,实际下载文件时,content-length不会设置HTTP标头.因此用户不知道要下载的文件有多大.
我可以os.path.getsize(FILE_LOCATION)在Python 中使用来获取文件大小(以字节为单位),但无法找到content-length在Flask中设置标头的方法.
有任何想法吗?
address_dict = {'address': {'US': 'San Francisco', 'US': 'New York', 'UK': 'London'}}
Run Code Online (Sandbox Code Playgroud)
当通过请求发送上述参数时,如何使用Flask上的request.form获取地址键中的值?
import requests
url = 'http://example.com'
params = {"address": {"US": "San Francisco", "UK": "London", "CH": "Shanghai"}}
requests.post(url, data=params)
Run Code Online (Sandbox Code Playgroud)
然后我在flask.request的背景下得到了这个.
ImmutableMultiDict([('address', u'US'), ('address', 'US'), ('address', 'UK')])
Run Code Online (Sandbox Code Playgroud)
如何获取每个地址键的值?
谢谢.
我查看了文档,但对于我的生活,我无法弄清楚request.formFlask中的对象是如何填充的. 该文件说,这是充满了来自POST解析的表单数据或PUT请求,但我的形式是动态的,所以我并不知道什么时候POST请求被发送存在哪些领域-虽然我想确保我从这些添加的信息字段到数据库.
一些表单字段是永远存在的,但也会有任意数量的额外字段从约60的名单如何,我应该去搞清楚这些附加字段是在请求我应该怎么弄的来自他们的数据?
编辑:我的具体问题已经解决,但仍然值得询问如何填充request.form字典.我发现很难的方法是,如果取消选中复选框输入,则不会在其名称下的字典中添加任何键,并且尝试获取字典中不存在的键的值会导致相当混乱和神秘的HTTP 400 BAD REQUEST错误.
我有一个基于Flask的webapp,当以某种方式发布到他们的父文档时偶尔会创建带有新随机密钥的新文档.新密钥进入父级的数据结构,更新的父级临时存储在会话中,并且在成功保存子文档后,存储的父级被拉出会话并存储在一起,以便将两者链接在一起.这是针对某些类型的关系完成的,其中一个人希望在键之间具有固有顺序,因此键被存储为父项上的列表.
现在,当我想使用Werkzeug提供的单元测试客户端进行单元测试时,问题出现了.做一个
ret = self.test_client.post(
request_path,
data=data,
follow_redirects=True
)
Run Code Online (Sandbox Code Playgroud)
在测试用例对象中将成功使用新密钥重定向到子文档 - 但我不知道在单元测试中检索此新密钥的位置.我无法在返回值的顶部找到一个属性,该属性将指示它被重定向到的位置.dir(ret)给我
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_ensure_sequence', '_get_mimetype_params', '_on_close', '_status', '_status_code', 'accept_ranges', 'add_etag', 'age', 'allow', 'autocorrect_location_header', 'automatically_set_content_length', 'cache_control', 'calculate_content_length', 'call_on_close', 'charset', 'close', 'content_encoding', 'content_language', 'content_length', 'content_location', 'content_md5', 'content_range', 'content_type', 'data', 'date', 'default_mimetype', 'default_status', 'delete_cookie', 'direct_passthrough', 'expires', 'force_type', 'freeze', 'from_app', 'get_app_iter', 'get_data', 'get_etag', 'get_wsgi_headers', 'get_wsgi_response', 'headers', 'implicit_sequence_conversion', 'is_sequence', 'is_streamed', 'iter_encoded', 'last_modified', 'location', …Run Code Online (Sandbox Code Playgroud) 将 Werkzeug 版本从 2.0.3 更新到 2.1.0 后,每次运行服务器时都会出现错误,错误日志如下:
Exception happened during processing of request from ('127.0.0.1', 44612)
Traceback (most recent call last):
File "/usr/lib/python3.8/socketserver.py", line 683, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python3.8/socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python3.8/socketserver.py", line 747, in __init__
self.handle()
File "/home/oladhari/.virtualenvs/reachat/lib/python3.8/site-packages/werkzeug/serving.py", line 363, in handle
super().handle()
File "/usr/lib/python3.8/http/server.py", line 427, in handle
self.handle_one_request()
File "/usr/lib/python3.8/http/server.py", line 415, in handle_one_request
method()
File "/home/oladhari/.virtualenvs/reachat/lib/python3.8/site-packages/werkzeug/serving.py", line 243, in run_wsgi
self.environ = environ = self.make_environ()
File "/home/oladhari/.virtualenvs/reachat/lib/python3.8/site-packages/django_extensions/management/commands/runserver_plus.py", line …Run Code Online (Sandbox Code Playgroud) 我正在使用 Flask 构建一个网络应用程序。我导入了flask-login库来处理用户登录。但它显示导入错误。
下面是我的文件夹结构:
>flask_blog1
>flaskblog
>static
>templates
>__init__.py
>forms.py
>models.py
>routes.py
>instance
>site.db
>venv
>requirements.txt
>run.py
Run Code Online (Sandbox Code Playgroud)
我的run.py:
>flask_blog1
>flaskblog
>static
>templates
>__init__.py
>forms.py
>models.py
>routes.py
>instance
>site.db
>venv
>requirements.txt
>run.py
Run Code Online (Sandbox Code Playgroud)
我的__init__.py:
from flaskblog import app
if __name__ == "__main__":
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
我的models.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
app = Flask(__name__)
app.config["SECRET_KEY"] = "5791628bb0b13ce0c676dfde280ba245"
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db"
db = SQLAlchemy(app)
bcrypt = …Run Code Online (Sandbox Code Playgroud) 这是一个最小的例子:
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SERVER_NAME'] = 'myapp.dev:5000'
@app.route('/')
def hello_world():
return 'Hello World!'
@app.errorhandler(404)
def not_found(error):
print(str(error))
return '404', 404
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
如果我设置了SERVER_NAME,Flask 会以 404 错误响应每个URL,当我注释掉该行时,它会再次正常运行。
/Users/sunqingyao/Envs/flask/bin/python3.6 /Users/sunqingyao/Projects/play-ground/python-playground/foo/foo.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 422-505-438
127.0.0.1 - - [30/Oct/2017 07:19:55] "GET / HTTP/1.1" 404 -
404 Not Found: The requested URL was not …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的 Flask 应用程序并成功将其部署到 AWS Lambda。我正在遵循本教程的第一步。
运行Lambda时,日志中出现以下错误:
Unable to import module 'wsgi_handler': No module named 'werkzeug._compat'
Run Code Online (Sandbox Code Playgroud)
我已经安装了 serverless-python-requirements 和 serverless-wsgi。这些文件夹位于上传到 AWS 的 zip 文件夹中。
我在 serverless_wsgi.py 中找到了对 werkzeug._compat 的引用:
from werkzeug._compat import BytesIO, string_types, to_bytes, wsgi_encoding_dance
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法在可能找到此函数的 Werkzeug 文件夹中的任何位置找到“_compat”。我是否缺少包裹或其他东西?
这是我的 serverless.yml:
# serverless.yml
service: serverless-flask
plugins:
- serverless-python-requirements
- serverless-wsgi
custom:
wsgi:
app: app.app
packRequirements: false
pythonRequirements:
dockerizePip: non-linux
provider:
name: aws
runtime: python3.6
stage: dev
region: us-east-1
functions:
app:
handler: wsgi_handler.handler
events:
- http: ANY /
- http: …Run Code Online (Sandbox Code Playgroud) python ×10
werkzeug ×10
flask ×9
aws-lambda ×1
build-error ×1
django ×1
download ×1
flask-login ×1
http-headers ×1
importerror ×1
nosetests ×1
pycharm ×1
testing ×1
url-for ×1