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('

今天天气不好

') 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//') 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 = '

千锋真棒!

' return render_template('stu.html', scores=stus_score, # 返回变量到html文件 content_h2=content_h2) # 返回变量到html文件

html文件的继承

# 1 base.html  父页面



    
    
        <!--jinja2-->
        {% block title %}  # 父类开接口,在子类中写内容填充
        {% endblock %}
    
    {% block css %}
    {% endblock %}

    {% block js %}
    {% endblock %}


    {% block content %}     
    {% endblock %}  


# 2.base_min.html  父页面初始化
{% extends 'base.html' %}     # 继承base.html
{% block js %}        # 填父类中名为js的接口
    
    
{% endblock %}    #内容到此为止
# 3. stu.html  最终显示的网页
{% extends 'base_main.html' %}
{% block title %}
    学生列表页面
{% endblock %}

{% block css %}
    
    
    
    

{% endblock %}

{% block js %}
    {{ super() }}        # 加上这个,js文件两个可以同时生效。这里的script和2.xx.html两个地方的js
    
{% endblock %}

{% block content %}
    
    

{{ content_h2 | safe }}

# 将字符串显示为标签内容

{{ 'Python' | length }}

# 显示字符串长度

{{ 'Python' | upper }}

# 大写

{{ 'Python' | lower }}

# 小写

{{ 'python' | upper | length }}

# 两个连接的显示最后一个的内容

{{ 'Python' | reverse }}

# 倒序

{{ content_h2 | striptags }}

# 去掉字符串标签符显示内容

{{ scores }}

# scores是py文件中传过来的变量 {# {{ 注释内容 }} #} # 这个表示注释,内容写在中间
    {% for a in scores %} {{ loop.revindex0 }} # 显示a的序号,倒着显示,最小为0 {{ loop.index }} # 显示a的序号,从1开始 {{ loop.first }} # 第一个显示为True {{ loop.last }} # 最后一个显示为True
  • {{ a }}
  • {% else %} # 如果for循环中scores没内容,显示下面的标签
  • 没有学生成绩数据
  • {% endfor %} # for循环的结束处
姓名 年龄
张三 28
李四 29
{% endblock %}

你可能感兴趣的:(03-06flask蓝图、jinja2)