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

猜你喜欢

转载自blog.csdn.net/qq_47122804/article/details/121408461