Web开发----Flask-Bootstrap , Flask-Mail , Flask-wtf表单

本文详细介绍了如何在Flask中集成Bootstrap以提升网页设计,使用Flask-Mail扩展发送邮件,以及如何结合Flask-WTF进行表单操作与用户登录。通过案例展示了Bootstrap的自定义模板块,Flask-Mail的配置与邮件发送,以及Flask-WTF的表单验证和数据获取。
摘要由CSDN通过智能技术生成

一、Flask中集成Bootstrap

1.Bootstrap简介

Bootstrap(http://getbootstrap.com/)是Twitter 开发的一个开源框架,它提供的用户界面组件可用于创建整洁且具有吸引力的网页,而且这些网页还能兼容所有现代Web 浏览器。

2.为什么需要在Flask中集成Bootstrap?

Flask模板集成Bootstrap。一般情况下Flask都是搭配Jinja2模板引擎来实现视图展现,
不过现在Bootstrap比较流行,内置的样式也比较好看,一些css样式和js动态都封装好了,有利于提高开发效率.

3.Flask中如何使用集成的Bootstrap?

要想在程序中集成Bootstrap,显然要对模板做所有必要的改动。
不过,更简单的方法是使用一个名为Flask-Bootstrap (相当于我们写的base.html模板)的Flask 扩展,简化集成的过程。

(1) Flask-Bootstrap 使用pip安装:
pip install -i https://pypi.douban.com/simple flask_bootstrap

(2) Flask 扩展一般都在创建程序实例时初始化,
Flask_Bootstrap的初始化方法:

from flask_bootstrap import Bootstrap
bootstrap = Bootstrap(app)

(3)初始化Flask-Bootstrap 之后,就可以在程序中使用一个包含所有Bootstrap 文件的基模板base.html。

文件位置:F:\python\Anaconda3\Lib\site-packages\flask_bootstrap\templates\bootstrap

这个模板利用Jinja2 的模板继承机制,让程序扩展一个具有基本页面结构的基模板,其中就有用来
引入Bootstrap 的元素。

  • Jinja2 中的extends 指令从Flask-Bootstrap 中导入bootstrap/base.html, 从而实现模板继承。
  • Flask-Bootstrap 中的基模板提供了一个网页框架,引入了Bootstrap 中的所有CSS 和JavaScript 文件。
  • 基模板中定义了可在衍生模板中重定义的块。block 和endblock 指令定义的块中的内容可添加到基模板中。

(4) 导航条链接
(5) 警告框链接

4.Flask-Bootstrap自定义模板块

Flask-Bootstrap 的base.html 模板还定义了很多其他块,都可在衍生模板中使用,下表列出了所有可用的块:
在这里插入图片描述
在这里插入图片描述

5.Flask-Bootstrap自定义模板块的继承实现

上表中的很多块都是Flask-Bootstrap 自用的,如果直接重定义可能会导致一些问题。例如,Bootstrap 所需的文件在styles 和scripts 块中声明。如果程序需要向已经有内容的块中添加新内容,必须使用Jinja2 提供的super() 函数。例如,如果要在衍生模板中添加新的JavaScript 文件,需要这么定义scripts 块:

{
   #链接我们自己写的css ,super() :先去执行父类base.html的css,在执行<link>的自己写的 css#}
{
   % block styles %}
{
   {
    super()}}

<link rel="stylesheet" href="../static/css/main.css">
{
   % endblock %}

案例

继承有公共样式的html模板+实现那自己的样式
在这里插入图片描述
run.py

from flask import Flask, render_template, flash
from flask_bootstrap import  Bootstrap


app = Flask(__name__)
app.config['SECRET_KEY'] = 'WESTOS'
bootstrap = Bootstrap(app) #初始化Bootstrap并与app关联起来
@app.route('/')
def index():
    flash('login success')
    return  render_template('index.html')

@app.route('/bbs/')
def bbs():
    return  render_template('bbs.html')


@app.route('/blog/')
def blog():
    return  render_template('blog.html')

if __name__ == '__main__':
    app.run(port=5003)

base.html
这里base.html继承了bootstrap/base.html

{
   % extends 'bootstrap/base.html' %}

{
   % block title%}

西部开源-{
   % block subtitle %} {
   % endblock %}
{
   % endblock %}

{
   #链接我们自己写的css ,super() :先去执行父类base.html的css,在执行<link>的自己写的 css#}
{
   % block styles %}
{
   {
    super()}}

<link rel="stylesheet" href="../static/css/main.css">
{
   % endblock %}


{
   % block navbar %}
<nav class="navbar navbar-inverse">  <!--navbar-inverse 导航栏黑色-->
    <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">Brand</a>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
                <li><a href="#">Link</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">Dropdown <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">Separated link</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">One more separated link</a></li>
                    </ul>
                </li>
            </ul>
            <form class="navbar-form navbar-left">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="Search">
                </div>
                <button type="submit" class="btn btn-default">Submit</button>
            </form>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">Link</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">Dropdown <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值