flask框架重定向+请求转发+模板继承+POST表单提交(3-入门篇-转载)

1.什么是重定向
重定向就是你访问一个网站输入的网址是:http://www.jd.com,但是你访问过去之后发现跳转到了淘宝网,
顶部地址栏的地址变成了http://www.taobao.com,这就是重定向的作用,重定向会改变顶部地址栏的内容,且在重定向过程中传输的信息会丢失,也就是说你本来是找A办事,但是你敲门的时候出来的是B,这就是重定向

2.什么是请求转发
请求转发是在容器内部进行的,也就是说通过容器内部调用请求转发,转发的路径必须是同一个web页面下的URL,且浏览器地址不变,容器内部传输的信息不会消失,也就是你请求的是 http://www.baidu.com,也就是A,但是中间经过B,C,D处理的部分是服务器内部进行的,你并没有感受到跳转你只做了一次请求最终到达的网页是百度,这就是请求转发

3.请求转发和重定向的区别

区别重定向请求转发
地址栏重定向会改变顶部地址栏的URL请求转发不会改变顶部地址栏的URL
请求次数至少两次请求一次请求
参数重定向过程中会丢失传递的参数请求转发中不会丢失传递的参数
请求资源重定向可以跳转到任意地址请求转发只能跳转服务器内部地址

4.什么是模板继承
模板继承指的就是创建一个公共的HTML页面当做父模板,其他子模板继承父类模板,不需要繁琐的写相同的部分,只需要更改或者添加自己的内容即可,这一点和Java的继承一模一样,这里就不过多介绍了

5.实例登录表单提交+重定向+请求转发

  • 目录结构如下

在这里插入图片描述

  • app.py 文件内容如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/12/13 22:47
# @Author  : 宁宁小可爱
# @File    : app.py
# @Software: PyCharm
from flask import Flask, render_template, redirect, request
"""
    说明:非常重要!!!!!!!!!!
        @ 这里首先访问 localhost:8200/ 会跳转到index视图函数中
        @ index试图函数返回父类模板 loginFather.html中
        @ 父类模板点击A标签跳转 redirectFunc视图函数中 ,视图函数中重定向!!到子模板 loginSon.html中
        @ 这里填写用户名: admin 密码:admin 即可登录成功
        @ 登录成功后提交表单跳转到 login视图函数中获取Post表单提交的数据进行校验,校验成功跳转到子模板 loginSuccess.html中
        @ 此次Demo到此结束,到此涉及到所有的基本前后端交互方法
        @ 这里 redirect中参数填写规则   视图函数的函数名称 必须和要跳转的函数保持一致!!!!!!!
"""
app = Flask(__name__)

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

@app.route('/redirectFunc')
def redirectFunc():
    return redirect('tologinSonHtml')

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

@app.route('/login', methods=['GET','POST'])
def login():
    userName = request.form['userName']
    passWord = request.form['passWord']

    if userName == 'admin' and passWord == 'admin':
        return render_template('loginSuccess.html')


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8200, debug=True)

  • loginFather.html 文件内容如下
<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>

    {% block title %} {#这里 {% block XXXX %} block是固定语法 后面的XXXX可以自己定义,写什么都可以#}
        <h1>这里是父模板,子模版继承后可以重写这里的内容</h1>
        <h1>只需要按照这个格式覆盖这里的内容即可</h1>
    {% endblock %}

    <body>

    {% block content %} {#这里也是一样 block是固定的  后面content写成什么都行,只要保证子模版使用的时候和这里一致#}
        这里填写正文内容,其余部分不重写都是继承父类模板
    {% endblock %}

    {# 这里的A链接标签并没有写在 block代码块中,所以这是父类模板的内容
       子类模板只要继承就会有这个公用元素
#}
    <a href="{{ url_for('tologinSonHtml') }}">跳转到子模版登录页面</a>

    </body>
</html>

  • loginSon.html 文件内容如下
{% extends "loginFather.html" %}

    {#
        子类模板什么都不用写,继承的部分全部由父类模板提供
        这里只需要写子类模板自己的内容就好了
    #}

    {% block title %}
        <h1>这里是子模版,我继承了父类模板,所以什么都不需要填写</h1>
        <h1>我覆盖了父模板的 title代码块</h1>
    {% endblock %}
    <body>

    {% block content %}
        <center>
            <form method="post" action="{{ url_for('login') }}">
                <div id="form">
                    <div class="int">
                        <label for="userName">帐 号:</label>
                        <input type="text" name="userName"/>
                    </div>
                    <div class="int">
                        <label for="passWord">密 码:</label>
                        <input type="password" name="passWord"/>
                    </div>
                    <br>
                    <input type="submit" value="提交" >
            </form>
        </center>

        {#
            这里会出现一个A标签,继承了父类模板
        #}
    {% endblock %}

  • loginSuccess.html 文件内容如下
{% extends "loginFather.html" %}

{#
    子类模板继承父类
    只需要重写添加自己的东西即可,公用的东西不用多余写
#}

{% block title %}
<h1>登录成功</h1>
<h1>我继承了父类模板,再次重写父类模板中的titil代码块</h1>
{% endblock %}

{% block content %}

    登录成功!!!!!!!!!!!!!!!!!!!!!
    重写父类模板 content区域

{% endblock %}

6.流程图

  • 首先浏览器地址栏输入: localhost:8200/ 访问到父模板

在这里插入图片描述

  • 成功重定向到子模板中,如下显示

在这里插入图片描述

  1. 输入密码后校验成功转发到 loginSuccess.html 页面中

在这里插入图片描述

到此整个Demo就已经结束了,这一篇算是基础进阶篇,下一篇讲解SQLAlchemy访问数据库进行增删改查操作

转载自:https://blog.csdn.net/weixin_44232093/article/details/103533891

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值