flask day03

2019-03-06  本文已影响0人  水果坚果燕麦片
关于 git从本地上传到github

git init

将所有文件添加到仓库
git add

把所有文件提交到仓库,双引号是提交的注释内容
git commit -m "提交文件"

git remote add origin地址关联远程仓库(只需要关联一次)

//如果创建远程仓库的时候仓库中有默认文
git pull --rebase origin master

git push [-u]origin master - 提交(-u在第一次提交分之的时候才用)

蓝图 /blueprint

产生背景:管理路由地址

安装:pip install flask-blueprint

使用:

# 1.定义一个蓝图'first'
blue = Blueprint('first',__name__)
# 写路由'index'
@blue.route('/index/')
# 2.管理蓝图
app.register_blueprint(blueprint=blue)

# 3.跳转 

# ① 有参跳转: redirect即重定向
# redirect(url_for('生成蓝图的第一个参数.跳转的函数名称', 参数名=值, 参数名2=值2))
def stu():
   stu_scores = [90, 89, 92, 88]
   content = '<h2>你真棒!</h2>'
   return render_template('stu.html',scores = stu_scores,content_h2 = content )

# ② 无参跳转:
# redirect(url_for('生成蓝图的第一个参数.跳转的函数名称'))
return redirect(url_for('first.s_id')

注:下图代码在浏览器中访问/redirect_func/时会跳转至/s_id/1

@blue.route('/redirect_func/')
def redirect_func():
    # return redirect('/login/')
    # return redirect(url_for('first.login'))
    # return redirect('/s_id/1/')
    return redirect(url_for('first.s_id', id=1))

@blue.route('/s_id/<int:id>/')
def s_id(id):
    return 's_id %s' % id

装饰器 / decorator

①外层函数嵌套内层函数
②内层函数调用外层参数
③外层函数返回内层函数

def is_login(func):
    @wraps(func)
    # 加一个装饰器令使用装饰器的函数最后返回的函数是本身而不是装饰器
    def check():
        # 登陆过后就能访问index.html界面
        try:
            session['login_status']
            return func()
        except:
            # 没有登陆不让访问,跳转到session_login.html
            return render_template('session_login.html')
    return check

模板

Ⅰ.父模板
①定义网站模板的大体框架,定义可以被动态填充内容的block块
②block块定义: {% block name %} {% endblock %}
注意:block名称不能取同名
Ⅱ.子模板
①继承父模板: {% extends '父模板' %}
②动态可选择性的填充父模板中定义的block块, 使用{% block name %} 动态内容 {% endblock %}

解析标签:

{% 标签名 %} {% end标签名 %}
① for: {% for a in [] %} {% else %} {% endfor %}
② if: {% if 判断条件 %} {% else %} {% endif %}
③ block: {% block name %} {% endblock %}

解析变量:

{{ 变量名 }}
loop.index: 从1开始的值
loop.index0: 从0开始
loop.revindex: 倒序到1结束
loop.revindex0: 倒序到0结束
loop.first: 第一次循环返回True
loop.last: 最后一次循环返回True

注解: {# 注解内容 #}
过滤器

写法: {{ 变量 | 过滤器 }}
safe、lenth、upper

父模板 base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
     <!-- jinja2 -->
    <title>
        {% block title %}
        {% endblock %}
    </title>
    {% block css %}
    {% endblock %}
    {% block js %}
    {% endblock %}
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

子模板

{% extends 'base_main.html' %}

{% block title %}
    学生列表页面
{% endblock %}
{% block css %}
    <!--引入一-->
    <!--<link rel="stylesheet" href="/static/css/style.css">-->
    <!--第二种写法-->
    <link rel="stylesheet" href="{{ url_for('static',filename='css/style.css') }}">
{% endblock %}
{% block js %}
    <!--<script src="1213.js"></script>-->
{% endblock %}

{% block content %}
<!-- 将样式加载出来 -->
<p> {{ content_h2 | safe }}</p>
<p> {{ 'python' | length }}</p>
<!-- 都会执行但是只能显示最后的效果 -->
<p> {{ 'python' | length | upper }}</p>
<p> {{ 'python' | lower }}</p>
<p> {{ content_h2 | striptags }}</p>

<p> {{ scores }} </p>
<!-- 解析标签 extends, block, for -->
<ul>
    {% for a in scores %}
    {{ loop.revindex0 }}
    {{ loop.first }}
    {{ loop.last }}
           <li {% if loop.index == 1 %} style="color: yellow" {% endif %}>{{ a }}</li>
    {% else %}
            <li>没有学生成绩数据</li>
    {% endfor %}

</ul>
<table>
     <thead>
        <th class="name">姓名</th>
        <th>年龄</th>
    </thead>
    <tbody>
        <tr>
            <td>张三</td>
            <td>28</td>
        </tr>
        <tr>
            <td>李四</td>
            <td>29</td>
        </tr>
    </tbody>
</table>
{% endblock %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生列表页面</title>
</head>
<body>

</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读