Flask 框架学习 -路由篇

初始化

引入模块
from flask import Flask
启动
app = Flask( __name__)

## 设置 调试模式
app.debug = True

if __name__ == '__main__':
    """
    配置hosts, port
    """
    app.run( host='0.0.0.0', port=8080 )
启动配置
app = Flask( __name__, template_folder='resources/views', static_folder='resources/assets' )

# template_folder 模板文件路径
# static_folder 静态资源文件路径

路由设置

@app.route()

参数

uri:请求链接

methods:请求方式

@app.route( '/', methods=['GET'] )
def index():
    return 'Hello World!'
渲染模板

from flask import render_template

"""
System Index
后端数据传递 - 多参数传递视图 , 分割
"""
@app.route( '/', methods=['GET'] )
def index():
    data = {
        'uid': 1,
        'uname': "Carey"
    }

    return render_template( 'index.html', user = data )
传递参数
'''
segment
<string:arg>    字符串
<int:arg>       整数
<float:arg>     浮点
<path:arg>      路径 
'''
@app.route( '/user/<uid>', methods=['GET'] )
def user( uid ):
    if int( uid ) == 1:
        uname = '张三'
    elif int( uid ) == 2:
        uname = '李四'
    elif int( uid ) == 3:
        uname = '王五'
    else:
        uname = '无名'

    return f"Hi~ Jobs, Welcom Rome {uname}"
设置响应

from flask import make_response


"""
响应  response
text
json
"""
@app.route( '/user/list', methods=['GET'] )
def list():
    data = []
    for i in range(1, 20):
        item = {
            'id': i,
            'name': f'张{i}',
            'age': i + 50,
            'email': f'zhang{i+10}@qq.com'
        }
        data.append( item )


    return make_response( data )

前后端交互

from flask import request

'''
前后端交互
request 对象
GET: request.args
POST: request.form
'''
@app.route( '/user/save', methods=[ 'GET', 'POST' ] )
def save():
    if 'GET' == request.method:
        uname = request.args.get('uname')
        uage = request.args.get('uage')
        uemail = request.args.get('uemail')

        respData = {
            'id': round( 100,1000 ),
            'name': uname,
            'age': uage,
            'email': uemail
        }
        return make_response(respData)

    if 'POST' == request.method:
        uname = request.form.get('uname')
        uage = request.form.get('uage')
        uemail = request.form.get('uemail')

        respData = {
            'id':  round( 100,1000 ),
            'name': uname,
            'age': uage,
            'email': uemail
        }
        return make_response( respData )
重定向

from flask import redirect  外部跳转
from flask import url_for    内部跳转

"""
重定向
redirect    - 外部跳转
url_for     - 内部跳转
"""
@app.route( '/redirt/<type>', methods=['GET'] )
def redirt( type ):
    if 'baidu' == type:
        return redirect( 'https://www.baidu.com' )

    if 'google' == type:
        return redirect( 'https://www.google.com' )

    if 'self' == type:
        return redirect( url_for( 'index' ) )

模板引擎

显示变量

{{ }} 

 

<p> {{ item.id }} -- {{ item.name }} -- {{ item.age }} -- {{ item.email }} </p>
条件语句

{% if  %}
{% elif %}
{% else %}
{% endif %}

 

{% if user.role == 'admin' %}
    <div> 当前用户可查看 全部 位注册者 </div>
    <div>
        {% for item in list %}
        <p> {{ item.id }} -- {{ item.name }} -- {{ item.age }} -- {{ item.email }} </p>
        {% endfor %}
    </div>
{% elif user.role == 'developer' %}
    <div> 当前用户可查看 10 位注册者 </div>
    <div>
        {% for item in list[:10] %}
        <p> {{ item.id }} -- {{ item.name }} -- {{ item.age }} -- {{ item.email }} </p>
        {% endfor %}
    </div>
{% elif user.role == 'employ' %}
    <div> 当前用户可查看 5 位注册者 </div>
    {% else %}
    <div>当前用户无权限查看 </div>
{% endif %}
静态资源 

此处与启动app时设置的静态资源地址相关联 

{{ url_for( 'static', filename='' ) }}

<link rel="stylesheet" type="text/css" href="{{ url_for( 'static', filename='css/index.css' ) }}" />

<script src="{{ url_for( 'static', filename='js/index.js' ) }}"></script>
模板继承

{% block  %} {% endblock %}

 主模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>编程学习 - Flask 学习之路<</title>
    <link rel="stylesheet" type="text/css" href="{{ url_for( 'static', filename='css/index.css' ) }}" />
    {% block css %} {% endblock %}
</head>
<body>
    <div class="container">
        <div class="navbar">
            <input type="checkbox" checked="checked">
            <ul>
                <li><a href="/">主页</a></li>
                <li><a href="/user/list">用户</a></li>
                <li><a href="/user/create">创建用户</a></li>
                <li><a href="/redirt/self">重定向</a></li>
                <li><a href="/redirt/baidu">外重定向</a></li>
                <li><a href="/redirt/baidu">外重定向</a></li>
            </ul>
        </div>
        {% if user %}
        <div class="user">
           欢迎回来!  {{user.uname}}
        </div>
        {% endif %}
    </div>

    <div class="content">
        {% block body %} {% endblock %}
    </div>

    <script src="{{ url_for( 'static', filename='js/index.js' ) }}"></script>
    {% block javascript %} {% endblock %}


</body>
</html>

 子模版

{% extends "layouts/freamwork.html" %}

{% block body %}
欢迎来到学习之路 - Flask {{user.uname}}!
{% endblock %}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值