美文网首页
Flask Note 2

Flask Note 2

作者: 开罗酒吧 | 来源:发表于2017-07-03 21:57 被阅读0次

    用户第一次访问程序时,服务器会收到一个没有表单数据的 GET 请求,所以 validate_on_submit() 将返回 False 。 if 语句的内容将被跳过,通过渲染模板处理请求,并传入表单对象和值为 None 的 name 变量作为参数。用户会看到浏览器中显示了一个表单

    @app.route('/', methods=['GET', 'POST'])
    def index():
        name = None
        form = NameForm()
        if form.validate_on_submit():
            name = form.name.data
            form.name.data = ''
        return render_template('index.html', form=form, name=name)
    

    from flask import redirect

    ....。 redirect() 函数的参数是重定向的 URL,这里使用的重定向URL 是程序的根地址,因此重定向响应本可以写得更简单一些,写成 redirect('/') ,但却会使用 Flask 提供的 URL 生成函数 url_for() 。推荐使用 url_for() 生成 URL,因为这个函数使用 URL 映射生成 URL,从而保证 URL 和定义的路由兼容,而且修改路由名字后依然可用.

    url_for() 函数的第一个且唯一必须指定的参数是端点名,即路由的内部名字。默认情况下,路由的端点是相应视图函数的名字。在这个示例中,处理根地址的视图函数是index() ,因此传给 url_for() 函数的名字是index 。

    关系和查询的处理方式类似。下面这个例子分别从关系的两端查询角色和用户之间的一对
    多关系:

    >>> users = user_role.users
    >>> users
    [<User u'susan'>, <User u'david'>]
    >>> users[0].role
    <Role u'User'>
    

    这个例子中的 user_role.users 查询有个小问题。执行 user_role.users 表达式时,隐含的
    查询会调用 all() 返回一个用户列表。 query 对象是隐藏的,因此无法指定更精确的查询
    过滤器。就这个特定示例而言,返回一个按照字母顺序排序的用户列表可能更好。在示例
    5-4 中,我们修改了关系的设置,加入了 lazy = 'dynamic' 参数,从而禁止自动执行查询。
    示例 5-4 hello.py :动态关系
    class Role(db.Model):

    ...

    users = db.relationship('User', backref='role', lazy='dynamic')

    ...

    这样配置关系之后, user_role.users 会返回一个尚未执行的查询,因此可以在其上添加过
    滤器:

    >>> user_role.users.order_by(User.username).all()
    [<User u'david'>, <User u'susan'>]
    >>> user_role.users.count()
    2
    

    连接到外部SMTP服务器:
    示例 6-1 hello.py :配置 Flask-Mail 使用 Gmail
    import os

    ...

    app.config['MAIL_SERVER'] = 'smtp.googlemail.com'
    app.config['MAIL_PORT'] = 587
    app.config['MAIL_USE_TLS'] = True
    app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')
    app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
    千万不要把账户密令直接写入脚本,特别是当你计划开源自己的作品时。为
    了保护账户信息,你需要让脚本从环境中导入敏感信息。

    保存电子邮件服务器用户名和密码的两个环境变量要在环境中定义。如果你在 Linux 或
    Mac OS X 中使用 bash,那么可以按照下面的方式设定这两个变量:
    (venv) $ export MAIL_USERNAME=<Gmail username>
    (venv) $ export MAIL_PASSWORD=<Gmail password>

    相关文章

      网友评论

          本文标题:Flask Note 2

          本文链接:https://www.haomeiwen.com/subject/xtgzcxtx.html