03-06flask蓝图、jinja2

hello.py 启动页面。

# hello.py 启动页面。

import redis
from flask import Flask
from flask_script import Manager
from flask_session import Session

from app.views import blue     # 导入app文件夹下views.py文件中的blue变量
app = Flask(__name__)
# 第二步: 管理蓝图
app.register_blueprint(blueprint=blue)    # =blue是上面导入的那个

# 加密,加密复杂程度和设值有关
app.secret_key = '1234567890'
# 配置session信息
# from flask_session import Session
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port=6379)
Session(app)

manage = Manager(app)

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

views.py 内容页面

#  views.py  内容页面
from flask import render_template, make_response, \
    request, session, Blueprint, redirect, \
    url_for

from utils.functions import is_login  

# 蓝图,管理路由地址
# 第一步: 生成蓝图对象
blue = Blueprint('first', __name__)

@blue.route('/')
def hello():
    return 'hello world'

@blue.route('/make_res/')
def make_res():
    # make_response('响应内容', 响应状态码)创建响应对象
    # return make_response('hello flask day02', 200)
    # return make_response('<h2>今天天气不好</h2>')
    index = render_template('index.html')
    return make_response(index, 200)

@blue.route('/register/', methods=['GET', 'POST'])
def register():
    print(request.method)
    if request.method == 'GET':
        return render_template('register.html')
    if request.method == 'POST':
        # 模拟注册功能
        # 1. 获取页面中传递的参数
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        # 模拟注册
        if username == 'coco' and password == password2 \
           and password == '123456':
            # 返回登录页面
            return redirect(url_for('first.login'))
            # return render_template('login.html')
        else:
            return render_template('register.html')

@blue.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')

    if request.method == 'POST':
        # 1.获取参数
        username = request.form.get('username')
        password = request.form.get('password')
        # 2.模拟登陆
        if username == 'coco' and password == '123456':
            # 向cookie中设置参数
            res = make_response(render_template('index.html'))
            # 设置cookie
            res.set_cookie('token', '12345678', max_age=3000)
            return res
        else:
            return render_template('login.html')

@blue.route('/logout/')
def my_logout():
    # 注销
    res = make_response(render_template('login.html'))
    res.delete_cookie('token')
    return res

@blue.route('/index/')
def index():
    # 登陆过后能看到index.html页面, 没有登录跳转到登录页面
    token = request.cookies.get('token')
    if token == '12345678':
        # 判断登陆成功了
        return render_template('index.html')
    else:
        # 判断登陆失败了
        return render_template('login.html')

@blue.route('/session_login/', methods=['GET', 'POST'])
def session_login():
    if request.method == 'GET':
        return render_template('session_login.html')

    if request.method == 'POST':
        # 解析参数
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'coco' and password == '123456':
            # 向session会话中设置键值对
            session['login_status'] = 1
            # session['name'] = 'coco'
            # session['pwd'] = '123456'
            return render_template('index.html')
        else:
            return render_template('session_login.html')

@blue.route('/session_index/')
@is_login
def session_index():
    # if 'login_status' in session:
        return render_template('index.html')
    # else:
    #     return render_template('session_login.html')

@blue.route('/xindex/')
@is_login
def xindex():
    # 登录过后能够访问index.html页面
    # 没有登录不让访问,跳转到session_login.html页面
    return render_template('index.html')

@blue.route('/session_logout/')
def session_my_logout():
    # 注销
    del session['login_status']
    return render_template('session_login.html')

@blue.route('/redirect_func/')
def redirect_func():
    # 跳转到登录页面
    # return render_template('login.html')
    # return redirect('/login/')
    # url_for('蓝图的第一个参数.跳转的函数名')
    # print(url_for('first.login'))
    # return redirect(url_for('first.login'))
    # return redirect('/s_id/1/')
    return redirect(url_for('first.s_id', id=100))   
  #上       重定向   打开页面

@blue.route('/s_id/<int:id>/')       
def s_id(id):              #int:id  s_id(id):  % id 三个id的名字必须一样
    return 's_id: %s' % id
#  下午模板内容

@blue.route('/student/')
def stu():
    stus_score = [90, 89, 100, 99, 87, 67]
    content_h2 = '<h2>千锋真棒!</h2>'
    return render_template('stu.html',
                           scores=stus_score,       # 返回变量到html文件
                           content_h2=content_h2)   # 返回变量到html文件

html文件的继承

# 1 base.html  父页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        <!--jinja2-->
        {% block title %}  # 父类开接口,在子类中写内容填充
        {% endblock %}
    </title>
    {% block css %}
    {% endblock %}

    {% block js %}
    {% endblock %}
</head>
<body>
    {% block content %}     
    {% endblock %}  
</body>
</html>
# 2.base_min.html  父页面初始化
{% extends 'base.html' %}     # 继承base.html
{% block js %}        # 填父类中名为js的接口
    <!--初始化引入jquery.js文件-->
    <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
{% endblock %}    #内容到此为止
# 3. stu.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 %}
    {{ super() }}        # 加上这个,js文件两个可以同时生效。这里的script和2.xx.html两个地方的js
    <script src="2q3weftrfe.js"></script>
{% endblock %}

{% block content %}
    <!--过滤器-->
    <p> {{ content_h2 | safe }} </p>    # 将字符串显示为标签内容
    <p>{{ 'Python' | length }}</p>           # 显示字符串长度
    <p>{{ 'Python' | upper }}</p>            # 大写
    <p>{{ 'Python' | lower }}</p>                # 小写
    <p>{{ 'python' | upper | length }}</p>  # 两个连接的显示最后一个的内容
    <p>{{ 'Python' | reverse }}</p>         # 倒序
    <p>{{ content_h2 | striptags }}</p>   # 去掉字符串标签符显示内容

    <!--解析变量使用 {{ 变量名 }}-->
    <p> {{ scores }} </p>     # scores是py文件中传过来的变量

    <!--解析标签,extends,block,for-->
    {# {{ 注释内容 }} #}   # 这个表示注释,内容写在中间
    <ul>
        {% for a in scores %}  
            {{ loop.revindex0 }}       # 显示a的序号,倒着显示,最小为0
             {{ loop.index }}           # 显示a的序号,从1开始
            {{ loop.first }}             # 第一个显示为True
            {{ loop.last }}              # 最后一个显示为True
            <li {% if loop.index == 1 %} style="color:yellow;" {% endif %}>
                {{ a }}
            </li>
        {% else %}            # 如果for循环中scores没内容,显示下面的标签
            <li>没有学生成绩数据</li>
        {% endfor %}         # for循环的结束处
    </ul>
    <table>
        <thead>
            <th>姓名</th>
            <th>年龄</th>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>28</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>29</td>
            </tr>
        </tbody>
    </table>
{% endblock %}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容