Flask(二)

一、flask-script扩展库

作用:
flask终端运行解析器 和django一样

安装:

pip3 install flask-script

使用:

from flask import Flask
from flask_script import Manager#终端运行解析器

app = Flask(__name__)
manager = Manager(app) #类的实例化

@app.route('/')
def index():
    return 'index'

if __name__ == '__main__':
    # app.run()
    manager.run()

终端启动项参数

参数名称参数说明
-hHOST 主机
-pPORT 端口
-ddebug 开启调试模式
-rreload 重新加载
–threaded开启多线程

python3 manage.py runserver -? 获取启动项参数

python3 manage.py runserver -h0.0.0.0 -p5001 -d -r --threaded

python3 manage.py runserver -d -r

二、session

将数据存储在服务器端 并给客户端浏览器设置一个cookie sessionid 唯一标识符 通过唯一sessionid 来确定当前的访问用户

注意:

需要设置secret_key

sessionid需要 scrf_token hash加密 在django里自带的

导入:

from flask import session

(1) 设置session
#设置session
@app.route('/set_session/')
def set_session():
    session['message'] = '你住在哪里? 住在我心里'
    return '设置session'
(2) 设置session并设置过期时间
from datetime import timedelta #计算时间的差值
#设置session并设置过期时间
@app.route('/set_sessino_lefttime/')
def set_sessino_lefttime():
    session.permanent = True #设置sesssion持久化存储
    app.permanent_session_lifetime = timedelta(minutes=60)
    session['message'] = '你住在哪里? 住在我心里'
    return '设置session并设置过期时间'
(3) 获取session
#获取session
@app.route('/get_session/')
def get_session():
    return '获取session {}'.format(session.get('message'))
(4) 删除session
#删除session
@app.route('/del_session/')
def del_session():
    #删除某一个session值
    session.pop('message')
    #删除所有session
    session.clear()
    return '删除session'

三、蓝本 blueprint

说明:

当代码越来越多的时候 所有的代码都放在一个文件里 很明显是不合理的 所以要按照不同的功能进行模块的划分 通过蓝本来实现

导入:

from flask import Blueprint

使用

user.py

from flask import Blueprint #导入蓝本

user = Blueprint('user',__name__)


@user.route('/login/')
def login():
    return '登录'

manage.py

#导入蓝本对象
from user import user
# app.register_blueprint(user) #注册蓝本对象user
app.register_blueprint(user,url_prefix='/user') #注册蓝本对象user 添加前缀

注意:

Blueprint参数name的值 要起有意义的 代表哪个蓝本

模板 Templates

说明:

模板就是按照一定规则进行替换展示html代码文件 模板引擎提供了替换规则

flask模板引擎:
Jinja2

一、创建模板目录和渲染

目录结构

project/
	templates/
    manage.py

渲染模板

  1. render_template() 渲染模板
  2. render_template_string() 渲染一段html代码进行响应

实例:

@app.route('/')
def index():
    # return render_template('index.html')
    return render_template_string("<p style='color:red;'>拼搏到无能为力 坚持到感动自己!!!</p>")

二、模板中的变量和标签

格式:

  1. 变量 {{ 变量名称 }}

  2. 标签 {% 标签名 %}

变量的使用

实例

manage.py

@app.route('/')
def index():
    return render_template('index.html',title='首页',message='拼搏到无能为力  坚持到感动自己!')

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
{#    <title>Title</title>#}
    <title>{{ title }}</title>
</head>
<body>
{{ message }}
</body>
</html>

标签

(1) if

主体结构

{% if val %}
	...
{% elif val  %}
	...
{% else %}
	...
{% endif %}

条件操作符号的使用:

> < >= <= == !=  and or in not in  not

实例

{% if grade >= 90 %}
    <p></p>
{% elif grade >= 80 %}{% elif grade >= 70 %}{% elif grade >= 60 %}
    合格
{% else %}
    不合格
{% endif %}
(2) for 循环

主体结构

{% for ... %}
	...
{% else %}
	...  当迭代的变量不存在 则执行else
{% endfor %}

实例

{#{% for i in range(10) %}#}
{% for i in abc %}
    {{ i }} <br>
{% else %}
    <p>你能不能看到我?</p>
{% endfor %}

迭代字典

{#for 循环迭代字典#}
{% for k,v in Dict.items() %}
    <p>{{ k }}===>{{ v }}</p>
{% endfor %}

注意:

在django模板中 items是属性调用 flask模板中 items是方法的调用

获取for循环迭代的状态

变量名称变量说明
loop.index获取当前索引 从1开始
loop.index0获取当前索引 从0开始
loop.first是否为第一次迭代
loop.last是否为最后一次迭代
loop.length迭代的长度

实例

{% for i in range(10) %}
    <p>{{ loop.index }} ====>  {{ loop.index0 }} ====>  {{ loop.first }} ====>{{ loop.last }}=====> {{ loop.length }}</p>
{% endfor %}

三、注释

{# 注释的内容 #}

注意:

flask的模板引擎注释 是多行注释

四、文件包含 include

使用

{% include ‘路径/文件名称.html’ %}

test_include.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body,a{
            padding: 0;
            margin: 0;
            text-decoration: none;
        }
        header,footer{
            width: 100%;
            height: 40px;
            background-color: #000;
            color:#fff;
        }
        footer{
            height: 80px;
            background-color: orange;
            position: fixed;
            bottom: 0;
        }
    </style>
</head>
<body>
{% include 'common/header.html' %}
<div id="con">
    <h2>我是中间内容部分</h2>
</div>
{% include 'common/footer.html' %}
</body>
</html>

common/header.html

<header>
    <h2>我是header</h2>
</header>

common/footer.html

<footer>
    <h2>我是footer</h2>
</footer>

五、macro 和宏

宏的定义

{% macro 宏的名称(可选参数) %}
	...
{% endmacro %}

说明:

类似python中的函数

实例

{% macro form(con='',type='text',name='',value='') %}
    <p>{{ con }}<input type="{{ type }}" name="{{ name }}" value="{{ value }}"></p>
{% endmacro %}

调用

<form action="">
    {{ form('用户名:',name='username') }}
    {{ form('密码:','password','userpass') }}
    {{ form(type='submit',value='submit') }}
</form>

宏的导入

  1. from 路径/宏的文件名称.html import 宏名
  2. import ‘路径/宏的文件名称.html’ as 别名

实例

{% from 'common/formmacro.html' import form %}
{% from 'common/formmacro.html' import form as form1 %} #导入并起别名
{% import 'common/formmacro.html' as formformmacro %}

<form action="">
    {{ formformmacro.form('用户名:',name='username') }}
    {{ formformmacro.form('密码:','password','userpass') }}
    {{ formformmacro.form(type='submit',value='submit') }}
</form>

注意:

  1. 宏的调用和函数一样 需要在定义的下方去调用
  2. 宏如果有形参且没有默认值 则可以不传实参 因为变量不存在值什么都没有
  3. 宏的参可以有形参 和函数定义一样
  4. 形参默认值遵循默认值规则
  5. 调用的时候 可以传递关键字参数 要遵循关键字参数的规则

六、模板继承

  1. extends 继承
  2. block 对于父模块的替换和标记

新建一个base.html

{% block doc %}
<!DOCTYPE html>
<html lang="en">
<head>
    {% block head %}
        <meta charset="UTF-8">
        <title>{% block title %}标题{% endblock %}</title>
        {% block meta %}
        {% endblock %}
        {% block linkestyle %}
        {% endblock %}
        {% block styles %}
        {% endblock %}
    {% endblock %}
</head>
<body>
{% block body %}
    body中的内容
{% endblock %}
</body>
</html>
{% endblock %}

test_base.html

{% extends 'common/base.html' %}
{% block title %}
test_base测试基础模板
{% endblock %}
{% block body %}
    {{ super() }}
    <h2>test_base测试基础模板</h2>
{% endblock %}

注意:

复用父模板的代码使用 {{ super() }}

其它的使用和 django一样

七、flask-bootstrap 扩展库

安装:

pip3 install flask-bootstrap

使用:

from flask_bootstrap import Bootstrap
bootstrap = Bootstrap(app) #实例化bootstrap类

实例:

{% extends 'bootstrap/base.html' %}
{% block title %}
    test_bootstrap测试
{% endblock %}
{% block navbar %}
<nav class="navbar navbar-inverse" style="border-radius:0;">
  <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="#">首页 <span class="sr-only">(current)</span></a></li>
        <li><a href="#">发表博客</a></li>
      </ul>

      <ul class="nav navbar-nav navbar-right">
          <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>
        <li><a href="#">登录</a></li>
        <li><a href="#">注册</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">个人中心 <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">个人信息管理</a></li>
            <li><a href="#">修改密码</a></li>
            <li><a href="#">修改邮箱</a></li>
            <li><a href="#">我的收藏</a></li>
            <li><a href="#">我的发表</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">退出登录</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
{% endblock %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值