我正在使用venv,我开发使用eclipse.我想添加一个联系页面.
我做了:
$ . bin/activate
$ pip install flask-wtf
Run Code Online (Sandbox Code Playgroud)
我在forms.py中导入了一些模块:
我用过这个:
from flask.ext.wtf import Form, TextField, TextAreaField, SubmitField
Run Code Online (Sandbox Code Playgroud)
然后这个:
from flask.ext.wtf import Form
from wtforms.fields import TextField, BooleanField
Run Code Online (Sandbox Code Playgroud)
没有人工作,因为我有这个错误:
from flask.ext.wtf import Form
File "/usr/local/lib/python2.7/dist-packages/flask/exthook.py", line 87, in load_module
raise ImportError('No module named %s' % fullname)
ImportError: No module named flask.ext.wtf
Run Code Online (Sandbox Code Playgroud) 我在负载平衡后面有一个Flask应用程序,它终止了SSL.我有代码"检测"何时使用SSL并改变请求对象:
@app.before_request
def before_request():
x_forwarded_proto = request.headers.get('X-Forwarded-Proto')
if x_forwarded_proto == 'https':
request.url = request.url.replace('http://', 'https://')
request.url_root = request.url_root.replace('http://', 'https://')
request.host_url = request.host_url.replace('http://', 'https://')
Run Code Online (Sandbox Code Playgroud)
然后我有一个蓝图视图功能:
admin = Blueprint('admin', __name__, url_prefix='/admin')
@admin.route('/login')
def login():
print request.url
Run Code Online (Sandbox Code Playgroud)
这个函数的输出(当我去/ admin/login时)总是http://而不是https://(尽管它应该在before_request函数中被突变).
关于如何解决这个问题的任何想法?
我是写作瓶子的新手,目前flask-principal用作我的授权机制.当用户尝试访问没有所需权限的URL时,flask-principal会引发PermissionDenied异常.
它导致我的系统抛出500 internal server错误.
我怎样才能捕获特定的异常并将用户重定向到警告页面呢?如果您可以共享代码示例,那将非常有用.
我的网络应用为用户分配子域,并可选择允许他们使用自定义域.除非用户访问其路径的自定义域而不包含尾部斜杠,否则此方法有效.
对此URL的GET请求按预期工作: http://user.example.com:5000/book/12345/
对此URL的GET请求按预期工作: http://custom.com:5000/book/12345/
GET请求此URL尝试重定向,但失败: http://custom.com:5000/book/12345
Flask最终将浏览器重定向到此URL,当然,这不起作用: http://<invalid>.example.com:5000/book/12345/
我应该采用不同的方式处理自定义域吗?这是重现这一点的完整最小例子.我已经设置了custom.com,example.com.和user.example.com在我的开发环境的/ etc/hosts文件中指向127.0.0.1,以便Flask收到请求.
from flask import Flask
app = Flask(__name__)
server = app.config['SERVER_NAME'] = 'example.com:5000'
@app.route('/', subdomain="<subdomain>")
@app.route('/')
def index(subdomain=None):
return ("index")
@app.route('/book/<book_id>/', subdomain="<subdomain>")
@app.route('/book/<book_id>/')
def posts(post_id, subdomain=None):
return (book_id)
if __name__ == '__main__':
app.run(host='example.com', debug=True)
Run Code Online (Sandbox Code Playgroud) 我的代码结构如下:
project
--app
----utils
------util.py
----__init__.py
----models.py
--tests
----__init__.py
Run Code Online (Sandbox Code Playgroud)
在tests/__ init__.py中,我有一些代码可以通过从app/__ init__.py导入所有应用程序来初始化应用程序(如果重要的话,那就是瓶子)和数据库会话.我可以在tests/__ init__.py中创建模型,查询和访问backrefs的实例.以下表格的代码可以正常工作:
objs = SomeModel.query.all()
for o in objs:
o.backref
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
from utils.util import some_function
objs = SomeModel.query.all()
for o in objs:
some_function(o)
Run Code Online (Sandbox Code Playgroud)
some_function只是访问backref
def some_function(obj):
obj.backref
Run Code Online (Sandbox Code Playgroud)
我得到一个错误 DetachedInstanceError: Parent instance <SomeModel at 0x2c1fe10> is not bound to a Session; lazy load operation of attribute 'backref' cannot proceed
阅读sqlalchemy文档表明我需要将对象重新关联到数据库sesssion.我这样做了,看起来它的工作原理(即运行该函数不会因上一个错误而失败):
import db_session
def some_function(obj):
db_session.add(obj)
obj.backref
Run Code Online (Sandbox Code Playgroud)
那么当一个物体到底是什么时候分开了?似乎只是将对象传递给另一个模块中的函数将其从会话中分离出来.对象是否不知道与之关联的sqlalchemy会话?我试图避免这样做db_session.add(obj)似乎很多样板代码.
使用 Python Imaging Library (PIL) 我得到:
"ValueError: image has wrong mode"
Run Code Online (Sandbox Code Playgroud)
when trying to convert an RGBA mode image to a P mode image. I couldn't find any evidence for the fact that it is possible. The material I found on the convert() method doesn't state that it isn't possible. I am wondering if I am doing something wrong or if this is just not possible.
Here is my code:
from PIL import Image
transImage = Image.open("transparent_8_bit.png")
print transImage.mode
transImageRGBA …Run Code Online (Sandbox Code Playgroud) 我猜每个人都知道:
Python比全局变量更有效地访问局部变量
好的,这是真的:
oldlist = [str(i) for i in range(500)]
oldlist1 = [i for i in range(500)]
%%timeit
newlist = []
for word in oldlist:
newlist.append(word.upper())
Run Code Online (Sandbox Code Playgroud)
10000循环,最佳3:每循环178μs
%%timeit
def func():
newlist = []
for word in oldlist:
newlist.append(word.upper())
return newlist
newlist = func()
Run Code Online (Sandbox Code Playgroud)
10000次循环,最佳3次:每次循环93.2μs
不幸的是,看起来它不是全球规则,而是特例:
%%timeit
newlist = []
for nr in oldlist1:
newlist.append(nr * nr)
Run Code Online (Sandbox Code Playgroud)
10000个循环,最佳3:每循环60.3μs
%%timeit
def func():
newlist = []
for nr in oldlist1:
newlist.append(nr * nr)
return newlist
newlist = func()
Run Code Online (Sandbox Code Playgroud)
10000个循环,最佳3:每循环60.5μs
如何解释这些测试?
获取烧瓶管理员的URL的正确方法是ModelView什么?
这是一个非常简单的例子:
my_admin_view.py
from flask.ext.admin.contrib.sqla import ModelView
from common.flask_app import app
from models import db, User, Role
admin = Admin(app, name="Boost Admin")
admin.add_view(ModelView(User, db.session, category="model"))
admin.add_view(ModelView(Role, db.session, category="model"))
Run Code Online (Sandbox Code Playgroud)
my_admin_template.html
...
<p>Check out my user admin link:</p>
<a href="{{ url_for('modelview.user') }}">User view link</a>
{# ______________
what argument to pass in here?? #}
...
Run Code Online (Sandbox Code Playgroud)
传递给url_for(...)谁的正确论据是什么?
我试过modelview.user,my_admin_view.modelview.user等等.似乎没有一个正确解决,我想避免硬编码链接.
谢谢!
假设我有一个用户模型
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
numLogins = db.Column(db.Integer)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
Run Code Online (Sandbox Code Playgroud)
如何查询具有最大登录次数的用户的记录?
基本上,我只想json编码我的SQL查询的结果.
x = db.session.query(User).filter_by(username = request.form['username'], password = request.form['password']).first()
print vars(x)
return jsonify(x)
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: < User WashingtonGeorge> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
这是打印变量的结果(x)
{'_updated': None, 'username': u'WashingtonGeorge', 'password': u'Washington', '_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7fd12a50c8d0>, 'firstname': u'George', 'lastname': u'Washington', '_created': None, 'fullname': u'George Washington', '_id': 1, 'email': u'WashingtonGeorge@yahoo.com'}
Run Code Online (Sandbox Code Playgroud) python ×10
flask ×8
sqlalchemy ×3
eve ×1
flask-admin ×1
optimization ×1
packages ×1
png ×1
python-venv ×1
request ×1
ssl ×1
subdomain ×1
werkzeug ×1