【问题标题】:Web2Py - Validate uploaded file by emailWeb2Py - 通过电子邮件验证上传的文件
【发布时间】:2012-10-08 18:23:08
【问题描述】:

web2py 专家。我要完成的任务如下:

-允许浏览我网站的人通过表单将文件上传到我的网站(通过 crud.create() 实现) -访问者无需建立帐户或登录即可上传文件 - 用户需要提供电子邮件地址才能上传文件

- 基本上,用户上传文件后,该文件被保存在 escrow/limbo 中,并向用户发送验证/验证电子邮件

-一旦用户单击验证电子邮件中的链接,文件就会发布到页面上,并公开供下载

执行此操作的最佳方法是什么?谢谢!

【问题讨论】:

    标签: python web2py


    【解决方案1】:

    最明显的就是使用session。 将上传文件的名称保存在某个会话变量中。

    使用 auth.verify_email(onaccept=...)

    验证用户的电子邮件后,您的代码将被调用 - 然后您可以关联文件和用户:来自 session.variable 和 auth.user_id 的文件名
    同时设置任何权限

    如果您希望用户有时间考虑并确认来自另一个比赛和另一个会话的注册,那么请在文件表中包含一个 user.email 字段:

    db.define_table('gifts', 
    Field('im', 'upload', requires=IS_EMPTY_OR(IS_IMAGE(maxsize=(200, 200))), autodelete=True, uploadfolder='static/gifts'),
    Field('email', requires=IS_EMAIL()),
    Field('notes','text', default='', writable=True),
    Field('t0','datetime',default=request.now, readable=False, writable=False),
    Field('t', 'datetime', default=request.now, update=request.now, writable=False),
    Field('rating', 'integer', default=0, writable=False, readable=False),
    Field('hidden', 'boolean', default=True, writable=False, readable=True),
    )
    

    然后在 onaccept 的回调函数中包含匹配查询: db(db.gifts.email==auth.user.email).update(hidden=False)

    在给用户适当的反馈之前最好选择任何隐藏的文件(可能他已经上传了几个文件直到确认时刻)

    祝你好运

    【讨论】:

    • 嗨,sherdim - 谢谢你的建议!我喜欢使用额外字段(而不是会话)和 auth.verify_email 的方法,您的建议看起来指向了正确的方向。但是,似乎当 auth.verify_email 包含在脚本中时,它会强制登录屏幕,这与不让用户登录上传相反。有没有办法解决?谢谢。
    【解决方案2】:

    在包含上传信息的表中,添加一个名为“validation_key”的新字符串字段。上传文件时,在其中插入 GUID 或相当长的字母数字字符串。将此密钥作为电子邮件中链接的一部分发送。当用户单击链接时,搜索密钥,如果找到,将数据库中匹配的“validation_key”设置为空。空的validation_key 表示已验证上传,您可以允许下载该文件。

    【讨论】:

    • 谢谢,天真。我了解该过程,此时,我通过向用户发送电子邮件解决了问题,让用户单击电子邮件中静态页面的链接,输入电子邮件中包含的代码。我是 web2py 的新手,所以对我来说困难在于实现一个想法。例如,您说要在电子邮件中发送一个链接,然后让用户单击该链接-在 web2py 中,动态生成此链接页面并在单击时将其删除的最佳方法是什么?而且,我很好奇是否有~'开箱即用'的方法来做我所要求的。
    • 据我所知,没有现成的方法。但是,它不应该是静态页面。创建一个名为 validate 的控制器和视图,其中显示了链接。它应该将您的密钥作为参数,检查密钥是否有效,如果找到则在数据库中将其无效。用户所要做的就是点击链接,甚至不需要输入任何内容。
    猜你喜欢
    • 1970-01-01
    • 2018-08-15
    • 2023-03-26
    • 2022-10-20
    • 2011-03-21
    • 2012-08-23
    • 2011-03-15
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多