{{ 变量名| 函数调用 }}
{{ name }}
{{ url_for() }}
{{ get_flshed_messages() }}
“hello”.lower()
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的 HTML 标签都删掉
{% for i in li%}
xxx
{% endfor %}
{% if user == 'westos'%}
xxxx
{% elif user == 'hello' %}
xxx
{% else %}
xxx
{% endif%}
{% macro render(id) %}
hello world {{ id }}
{% endmacro %}
{{ render(1) }}
{{ render(2) }}
{{ render(3) }}
一般网站的导航栏和底部不会变化, 为了避免重复编写导航栏信息;
{% block title %} {% endblock %}
这是导航栏
{% block body %}
hello
{% endblock %}
这是底部
{% extends '06_base.html'%}
{% block title %}
继承案例
{% endblock %}
{% block body %}
这是最新填的block内容
{% endblock %}
Bootstrap(http://getbootstrap.com/)是Twitter 开发的一个开源框架,
它提供的用户界面组件可用于创建整洁且具有吸引力的网页,而且这些网页还能兼容所有现代Web 浏览器。
Flask模板集成Bootstrap。一般情况下Flask都是搭配Jinja2模板引擎来实现视图展现,
不过现在Bootstrap比较流行,内置的样式也比较好看,有利于提高开发效率.
要想在程序中集成Bootstrap,显然要对模板做所有必要的改动。
不过,更简单的方法是使用一个名为Flask-Bootstrap 的Flask 扩展,简化集成的过程。
Flask-Bootstrap 使用pip安装:
pip install flask_bootstrap
Flask 扩展一般都在创建程序实例时初始化,Flask_Bootstrap的初始化方法:
from flask_bootstrap import Bootstrap
bootstrap = Bootstrap(app)
初始化Flask-Bootstrap 之后,就可以在程序中使用一个包含所有Bootstrap 文件的基模板base.html。
这个模板利用Jinja2 的模板继承机制,让程序扩展一个具有基本页面结构的基模板,其中就有用来
引入Bootstrap 的元素。
{%extends "bootstrap/base.html"%}
{%block title %}Flask{% endblock %}
{%block navbar %}
Hello,你好!
{% endblock %}
{% endblock %}
{% block content %}
...
...
...
...
Warning! Better check yourself, you're not looking too good.
Flask-Bootstrap 的base.html 模板还定义了很多其他块,都可在衍生模板中使用,下表列出了所有可用的块:
上表中的很多块都是Flask-Bootstrap 自用的,如果直接重定义可能会导致一些问题。例如,Bootstrap 所需的文件在styles 和scripts 块中声明。如果程序需要向已经有内容的块中添加新内容,必须使用Jinja2 提供的super() 函数。例如,如果要在衍生模板中添加新的JavaScript 文件,需要这么定义scripts 块:
{% block scripts %}
{{ super() }}
{% endblock %}
在我们开发完web系统后,一些特定的事件发生时,系统要自动发送相关邮件至管理员,运维人员和其他相关人员。
python标准库中的smtplib包也可以用在Flask程序中发送邮,但包装了smtplib的flask-mail扩展能更好地
和Flask集成。
pip install flask-mail
pip show flask-mail
"""
Date: 2019--29 13:32
User: yz
Email: [email protected]
Desc:
"""
from flask_mail import Mail,Message
from flask import Flask, render_template, request, flash, redirect
app = Flask(__name__)
app.config.from_pyfile('config.py')
def send_mail(to, subject,filename,**kwargs):
mail = Mail(app)
msg = Message(subject=subject,
sender='[email protected]',
recipients=to,
)
msg.html=render_template(filename+'.html',**kwargs)
with app.app_context():
mail.send(msg)
@app.route('/register/',methods=['POST','GET'])
def register():
if request.method=='GET':
return render_template('register.html')
else:
email=request.form.get('email')
try:
send_mail(to=[email],subject='注册通知邮件',filename='registerok',username=email)
except Exception as e:
flash('注册失败')
print(e)
return redirect('/register/')
else:
flash('注册成功')
return redirect('/login/')
@app.route('/login/')
def login():
return 'login'
if __name__ == '__main__':
app.run()
配置信息config.py代码:
# 配置发送邮件的相关信息;
# 指定邮件服务器的域名或者IP https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=369
MAIL_SERVER = 'smtp.qq.com'
# 指定端口, 默认25, 但qq邮箱默认为
MAIL_PORT = 465
MAIL_USE_SSL = True
MAIL_USERNAME = '1147570523'
# 此处的密码并非邮箱登录密码, 而是开启pop3
MAIL_PASSWORD = 'jduqsefulccwjcec'
DEBUG=True
SECRET_KEY='redhat'
Form表单,在Web应用中无处不在。比如: 用户登录表单, 用户注册表单。
如果有个框架,能把这些共性抽象出来,那就能大量简化我们的工作。Python的 WTForms 就提供了这
些功能,这里我们就要结合Flask的 WTForms 扩展, Flask-WTF ,来介绍如何在Web应用中制作表单。
from flask import Flask, request, render_template, flash
from forms import LoginForm, RegisterForm
from flask_bootstrap import Bootstrap
app = Flask(__name__)
app.config.from_pyfile('config.py')
bootstrap = Bootstrap(app)
@app.route('/login/', methods = ['GET', 'POST'])
def login():
# 1. 实例化表单对象
form = LoginForm()
# 1). 是否为post提交表单信息;
# 2). 是否通过验证函数?
if form.validate_on_submit():
# 获取表单的内容
email = form.email.data
password = form.password.data
if email =='[email protected]' and password=='westos':
return '登录成功'
else:
return "登录失败"
else:
return render_template('bs_login.html', form=form)
@app.route('/register/', methods = ['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
return '获取性别%s' %(form.gender.data)
else:
return render_template('register.html', form=form)
if __name__ == '__main__':
app.run()
表单代码:
"""
表单文件
"""
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, SelectField, SelectMultipleField
from wtforms.validators import DataRequired, Length, Email, EqualTo, Regexp, ValidationError
class LoginForm(FlaskForm):
email = StringField(label="电子邮箱",
validators=[
DataRequired(message='邮箱不能为空'),
Length(1, 15, message="长度不符合条件"),
Email(message='请输入有效的邮箱地址,比如:[email protected]')
])
password = PasswordField('密码',
validators=[
DataRequired(message=u'密码不能为空')])
submit = SubmitField(u'登录')
class RegisterForm(FlaskForm):
# StringField
# PasswordField
name = StringField(
label="用户名",
# 验证: 用户名不能为空的
validators=[DataRequired(message='用户名不能为空'),Length(5, 12, message="用户名长度必须在5-12之间") ]
)
password = PasswordField(
label="密码",
validators=[
DataRequired(),
# 验证密码长度是否为6~8之间, 如果不是, 则报错;
Length(6, 16, message="密码格式不正确"),
]
)
repassword = PasswordField(
"确认密码",
validators=[
DataRequired(),
# 验证当前表单输入的内容和password这个表单输入的内容是否一致, 如果不一致, 报错;
EqualTo('password', message="密码不一致")
]
)