我知道在php中我可以$_GET['key1']['key2']用来检索以数组形式发送的GET数据但是在Python中我可能会收到一个字符串并且它不被识别为数组/列表.
如果重要的话,我会使用flask/werkzeug.
简单的问题,但由于我是python的新手,从php转发,我得到了一些错误.
我有以下简单的类:
User(object)
fullName = "John Doe"
user = User()
Run Code Online (Sandbox Code Playgroud)
在PHP中,我可以执行以下操作:
$param = 'fullName';
echo $user->$param; // return John Doe
Run Code Online (Sandbox Code Playgroud)
我怎么在python中这样做?
有没有办法可以从另一个模板文件中加载jinja2模板?就像是
{{ render_template('path/to/file.html') }}
Run Code Online (Sandbox Code Playgroud)
我有一些我想重用的片段,所以拥有这个功能对我来说很重要.
目前在WTForms中访问错误,你必须循环遍历字段错误,如下所示:
for error in form.username.errors:
print error
Run Code Online (Sandbox Code Playgroud)
由于我正在构建一个不使用表单视图的休息应用程序,因此我不得不检查所有表单字段以查找错误所在的位置.
有没有办法可以做类似的事情:
for fieldName, errorMessage in form.errors:
...do something
Run Code Online (Sandbox Code Playgroud) 我的安全文件配置如下:
security:
...
pattern: ^/[members|admin]
form_login:
check_path: /members/auth
login_path: /public/login
failure_forward: false
failure_path: null
logout:
path: /public/logout
target: /
Run Code Online (Sandbox Code Playgroud)
目前,如果我访问成员网址而不进行身份验证,它会重定向到我,/public/login但我不希望它重定向.我主要是在我的控制器上使用json进行响应,所以我只想在受限制的URL上显示警告,例如{"error": "Access denied"}.如果我取出login_path: /public/login代码,它会重定向到默认的url/login.如何阻止它重定向?
我有一个用户查询,按每个用户拥有的订单数量(ordersCount)进行过滤.
User.query.filter('ordersCount>2')
Run Code Online (Sandbox Code Playgroud)
如果我运行它,它会说:"where子句中的未知列'ordersCount'"
根据我的经验,我应该使用这样的操作,因为mysql不会允许它不是表的一部分的字段,但如果我运行它而不是过滤器我得到:
(1054, "Unknown column 'ordersCount' in 'having clause'") 'SELECT count(1) AS count_1 \nFROM user \nHAVING ordersCount > 2' ()
Run Code Online (Sandbox Code Playgroud)
那么如何过滤sqlalchemy中的计数列?
我正在使用 Flask 和 sqlalchemy 构建 REST 应用程序,但遇到了一个问题。我想查询所有用户的图书数量。每个用户都有很多书,所以我的查询应该返回每个用户在结果集中拥有的书数。
// Models
class User( object ):
__tablename__ = 'user'
class Book( object ):
__tablename__ = 'book'
// Metadata
users_table = Table( 'user', metadata,
Column( 'id', Integer, primary_key = True ),
Column( 'username', String( 50 ), unique = True )
)
books_table = Table( 'book', metadata,
Column( 'id', Integer, primary_key = True ),
Column( 'title', String( 50 ) ),
Column( 'user_id', Integer, ForeignKey( 'user.id' ) )
)
// Mappers
mapper( User, users_table, properties = …Run Code Online (Sandbox Code Playgroud) 我有一个python对象,它收集一些请求数据,所以我可以根据我通过GET方法收到的过滤器和分类器创建模型查询.(排序= ID&为了= DESC ...)
class Search( object ):
sorters = []
filters = []
Run Code Online (Sandbox Code Playgroud)
如果请求具有过滤器和分类器,则类属性将填充正确的参数.这很好用,查询构建正常.问题是当我触发第二个请求时,分拣机和过滤器会保留前一个请求中的值,因此Search对象不是新的但是持久的.
知道它为什么会这样吗?顺便说一下,我是python的新手,PHP(我的区域)将只为每个请求实例化一个新对象.
假设我在sqlalchemy中有3个表.用户,角色和UserRoles以声明方式定义.如何建议做这样的事情:
user = Users.query.get(1) # get user with id = 1
user_roles = user.roles.query.limit(10).all()
Run Code Online (Sandbox Code Playgroud)
目前,如果我想获取用户角色,我必须查询3个表中的任何一个并执行连接以获得预期结果.直接调用user.roles会带来一些我无法过滤或限制的项目列表,因此它不是很有帮助.加入的东西也不是很有帮助,因为我正在尝试使用以下请求创建一个休息接口:
localhost/users/1/roles所以只需要通过该查询我就能够做到Users.query.get(1).roles.limit(10) etc etc这一点真的应该"智能化"我的休息界面而不需要太多膨胀的代码和if条件,而不必知道哪个表加入什么.用户模型已经具有作为关系属性的角色,那么为什么我不能简单地查询关系属性,就像我使用普通模型一样?
我正在使用flask作为带有sqlalchemy的python框架.模型使用query_property来帮助我构建查询:
class Person(object):
query = db_session.query_property()
....
persons = Person.query.all()
Run Code Online (Sandbox Code Playgroud)
每个人都有他居住的城市,州和国家,我想收集所有结果并输出如下内容:
Country State City Persons(count)
================================================================================
US NY New York 10
DE Berlin Berlin 100
Run Code Online (Sandbox Code Playgroud)
这显然需要按国家,州,城市选择计数和分组.group by thing有效但我不知道如何实现计数,因为查询属性没有select方法,在这种情况下我会写:
Person.query.select([Person.country, Person.state, Person.city, func.count(Person.id)]).all()
Run Code Online (Sandbox Code Playgroud)
谁知道如何使用query_property与group_by和count?
即使我的一切看起来很好,我在下面的查询中收到错误:
SELECT
user.*
FROM
user
INNER JOIN
role ON role.id = user.role_id
LEFT OUTER JOIN
user_documents ON user.id = user_documents.user_id
WHERE
user.id = 1
GROUP BY
user.id
HAVING
count(user_documents.user_id) < role.max_allowed_documents
Run Code Online (Sandbox Code Playgroud)
我得到的错误是Unknown column 'role.max_allowed_documents' in 'having clause'三重检查,该列存在于我的角色表中.有任何想法吗?
基本上我将用户分配给角色.每个用户可能在角色表中定义了许多文档,这些文档max_allowed_documents是一个整数,并且此查询尝试选择仍然允许拥有文档的所有用户(未达到其限制).
我有以下jbuilder视图:
json.array!(@users) do |json, user_object|
json.partial! "api/v1/users/show", user: user_object
end
Run Code Online (Sandbox Code Playgroud)
显示每个用户数据我呈现部分显示以避免重复.这一切都很好但我还想在结果中添加一个根节点来指示一些分页数据:
{
total_pages: 1,
total_records: 1000,
users: {
[ ...users here... ]
}
}
Run Code Online (Sandbox Code Playgroud)