标签: web2py

web2py将值插入会话

我遇到会话问题

用户从下拉菜单中选择smth后,我必须将该值插入会话.我需要该值来获取模型中auth表的数据库(如果我从request.var读取,它会在登录/注册表单时崩溃).我在哪里插入会话中的值以及如何(view,controler).

现在我用cookie解决了它,但它不是最安全的.

任何建议=

谢谢

session web2py

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

控制器如何在web2py中工作?

我有一个关于控制器和表单如何在web2py中工作的问题.考虑下一个控制器功能(来自we2py book):

def display_form():
form=FORM('Your name:',
          INPUT(_name='name', requires=IS_NOT_EMPTY()),
          INPUT(_type='submit'))
if form.accepts(request,session):
    response.flash = 'form accepted'
elif form.errors:
    response.flash = 'form has errors'
else:
    response.flash = 'please fill the form'
return dict(form=form)
Run Code Online (Sandbox Code Playgroud)

这个功能有两个目标:第一个是返回一个表单,第二个是告诉在提交按钮上做什么.我无法理解它是如何可能的.被叫两次吗?第一次视图需要知道什么是形式,第二次按下提交按钮时?直观地说这件作品:

if form.accepts(request,session):
    response.flash = 'form accepted'
elif form.errors:
    response.flash = 'form has errors'
else:
    response.flash = 'please fill the form'
Run Code Online (Sandbox Code Playgroud)

应该是一些负责后期处理的不同功能.

它是如何工作的?

python web2py

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

在web2py中加倍加入.如何在web2py中应用此SQL?

在我的图像标记应用程序中,我想显示分配给图像的标签列表以及分配了该标签的标签类型和用户信息.主表是imageLabel.表auth_user和labelType包含标签的附加信息.

你能帮我把这个SQL语句转换成web2py:

SELECT labelType.name, imageLabel.labelValue, auth_user.first_name, auth_user.last_name  from imageLabel
LEFT JOIN labelType 
ON imageLabel.labelId = labelType.id
LEFT JOIN auth_user
ON imageLabel.userId = auth_user.id
WHERE imageLabel.imageId = 581
ORDER BY labelType.name
Run Code Online (Sandbox Code Playgroud)

数据模型如下:

db.define_table('labelType',
    Field('name','string'),
)
db.define_table('imageLabel',
    Field('imageId','string'),
    Field('labelId','integer'),
    Field('userId','integer'), 
    Field('labelValue','text'),
)
db.define_table('image',
    Field('imageId','string')
)
# + built-in auth tables
Run Code Online (Sandbox Code Playgroud)

我的尝试是:

labels = db((db.imageLabel.id == db.labelType.id) ).select( 
        db.imageLabel.labelValue, db.labelType.name, db.auth_user.first_name, db.auth_user.last_name, db.imageLabel.labelTimeStamp, 
        left=db.auth_user.on(db.imageLabel.userId==db.auth_user.id)
        )
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,因为代码中没有WHERE imageLabel.imageId = 581部分.我无法弄清楚如何在web2py中使用WHERE以及2"JOINS":-(

非常感谢您的任何帮助!

编辑:解决方案阅读安东尼的答案后:

labels = db(
    db.imageLabel.imageId == img.id
).select(
    db.imageLabel.labelValue,
    db.labelType.name,
    db.auth_user.first_name,
    db.auth_user.last_name,
    db.imageLabel.labelTimeStamp, …
Run Code Online (Sandbox Code Playgroud)

database join web2py

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

即使在处理表单后,Flash消息也不会显示

我编写了代码来创建自定义表单.它是一个简单的表单,上面有一些文本框元素.当我提交表单时,它会被处理但不会显示flash消息.我不想扩展我的视图layout.html,但是我使用的是使用的.js文件layout.html

我在控制器中的代码如下:

myform=SQLFORM.factory(        
        Field('field1','unicode',requires=IS_NOT_EMPTY()),   
        Field('field2','unicode',requires=IS_NOT_EMPTY()),                     
        submit_button = 'Add',
        formstyle="divs",_id="form1"
        )  
if myform.process(formname='myform',keepvalues=True).accepted:
    response.flash = 'form accepted'
Run Code Online (Sandbox Code Playgroud)

我在视图中使用的.js文件如下:

<link href="{{=URL('static','css/payments/css/style.css')}}" rel="stylesheet" /> 
<script src="{{=URL('static','js/modernizr.custom.js')}}" type="text/javascript" charset="UTF-8"></script>
<script src="{{=URL('static','js/web2py.js')}}" type="text/javascript" charset="UTF-8"></script>
<script src="{{=URL('static','js/jquery.js')}}" type="text/javascript" charset="UTF-8"></script>
<script src="{{=URL('static','js/val/dist/jquery.validate.js')}}" type="text/javascript"></script>
<script src="{{=URL('static','js/jquery-ui-1.10.3.custom.js')}}" type="text/javascript"></script>
<script type="text/javascript" src="{{=URL('static','js/genaral.js')}}"></script>
Run Code Online (Sandbox Code Playgroud)

如果我错过了重要的事情,请告诉我.

web2py

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

Web2py:将变量从视图传递到控制器

如何在视图中将JavaScript变量从视图传递到控制器中的Python?我不想使用request.varsrequest.args,因为这将允许用户通过在地址栏中键入操作来为操作提供任意参数。

示例视图:

<button onclick='myFunction();'>Execute</button>
<script>
    function myFunction();{
        var value = calculateValue();
        //pass value to my_action
        window.location = 'my_action';
    }
</script>
Run Code Online (Sandbox Code Playgroud)

控制器示例:

def index():
    return dict()

def my_action():
    #retrieve passed variable
    #handle the variable 
    #...
    redirect(URL('index'))
Run Code Online (Sandbox Code Playgroud)

javascript python web2py

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

如何通过在地址栏中键入操作来防止用户访问操作?

potentially_dangerous_method()我的控制器中有一个方法。我不希望用户随时访问它,因为它确实删除和插入了一些数据库记录。我只希望另一个动作bouncer()(也只有那个)可以调用它,并且该动作具有所有适当的验证和检查,因此它知道可以真正调用该方法。

但就目前而言,用户只需[application]/[controller]/potentially_dangerous_method在地址栏中键入即可访问该方法。我该如何预防?

web2py

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

为什么这个mysql语法错了?

CREATE TABLE OWLUpdates(
id INT AUTO_INCREMENT NOT NULL,
website INT, INDEX website__idx (website), FOREIGN KEY (website) REFERENCES OWLWebsite          (id) ON DELETE CASCADE,
suburl VARCHAR(255),
sendtimes INT,
title VARCHAR(255) UNIQUE,
description LONGTEXT,
is_show CHAR(1),
reads INT,
degrees INT,
mtime DATETIME,
PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)

什么是错误?web2py报告:

(1064,你"你的SQL语法有错误;请查看与你的MySQL服务器版本相对应的手册,以便在'读取INT,\n度INT,\n mtime DATETIME,\n PRIMARY KEY附近使用正确的语法; id)\n)ENGINE = Inn'在第9行")

mysql sql web2py

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

你可以在SQLFORM.grid中添加自定义字段/列吗?

我试图使用SQLFORM.grid()一切工作找到但是我正在尝试添加一个新的field.我的查询由连接在一起的两个表组成.例如:

db.define_table('table1',
    Field('total','integer')
)
db.define_table('table2',
    Field('table1_id','integer'),
    Field('count','integer'),
)

query = (db.table1.id == db.table2.table1_id)

grid = SQLFORM.grid(query,fields=[
    db.table1.total,
    db.table2.count,
    (db.table1.total - db.table2.count) #this doesn't work
    ])
Run Code Online (Sandbox Code Playgroud)

那么是否可以添加通过数学函数生成的列,或者在这种情况下不一定需要但是两个值连接在一起?

web2py

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

基于Web2py JWT的身份验证 - 刷新令牌

我正在尝试为基于Web2py构建的一些REST API实现基于令牌的身份验证.我使用的是2.14.6版(稳定版).如文档中所述,我按照这些步骤操作,并能够使用JWT从受身份验证的资源中验证和检索数据.我已完成以下步骤:

from gluon.tools import AuthJWT

myjwt = AuthJWT(auth, secret_key='secret', user_param="email")

def login_take_token():
    return myjwt.jwt_token_manager()

@myjwt.allows_jwt()
@auth.requires_login()
def get_my_service():
    my_code
Run Code Online (Sandbox Code Playgroud)

因此,使用此配置,我可以在调用函数"login_take_token"时获取令牌,并从"get_my_service"获取所需数据.以下是服务电话:

/app/controller/login_take_token?email=abc.com&password=abc123
Run Code Online (Sandbox Code Playgroud)

这给我们一个令牌说

/app/controller/get_my_service?_token=<TOKEN_RECEIVED>
Run Code Online (Sandbox Code Playgroud)

这会在成功登录时返回所需的预期数据.

我的问题是,正如web2py文档中所解释的,如果令牌过期,我们可以使用令牌并调用login_take_token以获取新的活动令牌.但是这个下面的调用不返回任何令牌,但只返回400 Bad Request,输出"Token is expired".

/app/controller/login_take_token?_token=<TOKEN_RECEIVED>
Run Code Online (Sandbox Code Playgroud)

如何使用旧令牌(已过期)进行调用以获取新令牌.

问候

python web2py

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

Web2py错误“ &lt;class'sqlite3.OperationalError'&gt;没有这样的表:应用程序

当我尝试向Web2py数据库添加新记录时,出现此错误。我已将存储库从另一台计算机上移开,但是我所有的文件都是相同的。

我以前的数据库DAL连接参数如下:

from gluon.contrib.appconfig import AppConfig
myconf = AppConfig(reload=True)
if not request.env.web2py_runtime_gae:
     db = DAL(myconf.get('db.'+myconf.get('db.mode')+'_uri'),
              pool_size=myconf.get('db.pool_size'),
              migrate=myconf.get('db.migrate'),
              migrate_enabled=myconf.get('db.migrate_enabled'),
              #fake_migrate_all=myconf.get('db.fake_migrate_all'),
              fake_migrate_all=True,
              check_reserved=['all'])

else:
    db = DAL('google:datastore+ndb')
    session.connect(request, response, db=db)
Run Code Online (Sandbox Code Playgroud)

它给了我user_auth找不到错误,因此我按照官方文档将其更改为:

from gluon.contrib.appconfig import AppConfig
myconf = AppConfig(reload=True)
if not request.env.web2py_runtime_gae:
    db = DAL('sqlite://storage.sqlite', pool_size=1, check_reserved=['all'], migrate=False, fake_migrate_all=True)
else:
    db = DAL('google:datastore+ndb')
Run Code Online (Sandbox Code Playgroud)

它显示了/ database和“ Database_Administration”控制台中的所有表,我尝试添加新记录,但出现以下错误。

Web2py Error" <class 'sqlite3.OperationalError'> no such table: application
Run Code Online (Sandbox Code Playgroud)

我的应用程序中没有名为“应用程序”的表,因此它必须与应用程序相关。请指教。

sqlite web2py

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

标签 统计

web2py ×10

python ×3

database ×1

javascript ×1

join ×1

mysql ×1

session ×1

sql ×1

sqlite ×1