flask web开发(三) --表单,电子邮件

web表单:

app.config['SECRET_KEY'] = 'hard to guess string'

这里使用
每个web表单都有继承自form的类表示,类定义表单中的一组字段,每个字段都用对象表示:

class NameForm(FlaskForm):
    name = StringField('What is your name?', validators=[DataRequired()])
    submit = SubmitField('Submit')

stringField 相当于HTML的标签
validators 是指定一个由验证函数组成的数组

把表单渲染成html页面:
使用Flask-Bootstrap

{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

wtf.quick_form() 函数的参数为Flask-WTF 表单对象form = NameForm(),使用Bootstrap的默认渲染样式渲染传入的表单

在py文件中连接html文件:

@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)

validate_on_submit() 函数用来看用户填写数据是否能被所有验证函数接受。

重定向和用户会话
提交表单后点击刷新按钮,要求在再次提交表单之前进行确认,所以使用重定向作为post请求的响应,然后把数据存储在用户会话中–session

session['name'] = form.name.data
return redirect(url_for('index'))

推荐使用url_for()生成URL,因为这个函数使用URL映射,保证路由兼容。
后面render的时候使用name=session.get('name')

flash 消息
让用户知道状态发生了变化,使用flash()函数可以实现



电子邮件

使用flask-mail拓展
flask-mail连接到简单邮件传输协议SMTP服务器,并把这个邮件交给服务器发送,flask-mail会默认使用localhost上面端口25,无需验证即可发送邮件。

首先初始化flask-mail:

from flask.ext.mail import Mail
mail = Mail(app)

下面例子配置flask-mail使用Gmail:

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')

这里不要把账号密码直接写入脚本,而是使用环境变量来储存这种敏感信息:
可以用这种方式存储环境变量:
export MAIL_USERNAME=<...>

在程序中集成发送电子邮件功能:

app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'  #定义邮件主题的前缀
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <flasky@example.com>'  #定义发件人的地址
def send_email(to, subject, template, **kwargs):  #参数分别是收件人,主题,渲染邮件正文的模板,关键字参数列表
    msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + ' ' + subject,
                  sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
    msg.body = render_template(template + '.txt', **kwargs)
    msg.html = render_template(template + '.html', **kwargs)
    mail.send(msg)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值