Flask 响应四剑客 模板层

介绍

说明:
flask是一个轻量级的web框架,被称为微型框架。只提供了一个高效稳定的核心,其它全部通过扩展来实现。意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩展库。

核心:

WSGI系统、调试、路由

模板引擎(Jinja2,是flask核心开发者人员发开的)

安装:

pip install flask

werkzeug简介

Flask的socket是基于Werkzeug 实现的

Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等

from werkzeug.wrappers import Request, Response

@Request.application
def hello(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 4000, hello)  # run_simple方法的第三个参数会加括号执行

Flask运行的本质

from flask import Flask
# 实例化产生一个Flask对象
app = Flask(__name__)
# 装饰器路由 内部会形成一个路由与函数的对应关系,如:{'/':index},当请求的路由是'/'就会调用index函数
@app.route('/')  # 注意: 这里要理解有参装饰器以及装饰器加括号后运行的逻辑
def index():
    return 'ok'

if __name__ == '__main__':
    app.run()
    # 本质是调用 run_simple(host, port, self, **options), 这里的self是Falsk对象,即app
    # app加括号执行 调用的是Flask的__call__里的wsgi_app方法,返回response



def wsgi_app(self, environ, start_response):
    # 将请求相关的数据environ封装到了request_context中
    ctx = self.request_context(environ)
    ...

def __call__(self, environ, start_response):
    return self.wsgi_app(environ, start_response)  # environ: 是基于HTTP请求的所有数据(请求首行,头,体)

启动参数
参数 说明
debug 是否开启调试模式,默认为False;开启后会有出错调试信息,文件会自动加载。
threaded 是否开启多线程,默认为Flase。
host 指定主机,默认为’127.0.0.1’,设置为’0.0.0.0’后可以通过IP进制访问
port 指定端口,默认为5000。
启动示例:app.run(debug=True, threaded=True, host=‘0.0.0.0’, port=5555)

响应四剑客 render_template,redirect,jsonify

返回字符串

@app.route('/')
def index():
    1. 直接返回字符串
    return 'ok'

返回HTML 

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
    2 返回HTML
    return render_template('index.html')  # 参数: xxx.HTML

跳转页面(重定向)

from flask import Flask, redirect
app = Flask(__name__)

@app.route('/')
def index():
    3 跳转页面
    return redirect('/login')  # 参数: url

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

返回json数据

from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/')
def index():
    4 返回json数据
    dic = {'name':'xionger', 'age': 20}
    return jsonify(dic)  # 参数: 要序列化的数据

模板层 templates

1. 创建templates文件夹
2. 文件夹内创建HTML文件

视图函数向HTML页面传递数据:

方式一
@app.route('/')
def index():
    dic = {'name': 'xionger', 'age': 20}
    return render_template('index.html', num=100, dic_data=dic)
方式二
from flask import Flask, render_template, Markup
app = Flask(__name__)

def func(t1, t2):
    return Markup(f'<h1>hahaha{t1}{t2}</h1>')

@app.route('/list',methods=['GET'])  # 该视图函数允许的请求方式为 GET
def list():
    return render_template('list.html',html="<h1>hahaha</h1>", func=func)

list.html
    {{ html|safe }}
    {{ func(1, 2) }}

模板语法

<body>
    <p>{{ num }}</p>  100
    <p>{{ dic_data.name }}</p>  xionger
    <p>{{ dic_data.get('name') }}</p>  xionger
    <p>{{ dic_data['name'] }}</p>  xionger
</body>
<!-- 字典, 列表等数据类型在python中如何使用, 在模板中就如何使用 -->

<!-- 遍历循环 -->
<body>
    <h1>用户列表</h1>
    <table>
        {% for k,v in user_dict.items() %}
        <tr>
            <td>{{k}}</td>
            <td>{{v.name}}</td>
            <td>{{v['name']}}</td>
            <td>{{v.get('name')}}</td>
            <td><a href="/detail/{{k}}">查看详细</a></td>
        </tr>
        {% endfor %}
    </table>
</body>

<!-- 逻辑判断 -->
<body>
    <h1>用户列表</h1>
    <table>
        {% if name %}
          <h1>Hello {{ name }}!</h1>
        {% else %}
          <h1>Hello World!</h1>
        {% endif %}
    </table>
</body>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值