- 第一篇------环境搭建篇
- 第二篇------基础篇-路由+蓝图+Session+前后端基本交互语法
- 第三篇------本篇
- 第四篇------使用SqlAlchemy操作数据库
- 第五篇------flask实战-用户登录注册系统
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/
访问到父模板
- 成功重定向到子模板中,如下显示
- 输入密码后校验成功转发到 loginSuccess.html 页面中
到此整个Demo就已经结束了,这一篇算是基础进阶篇,下一篇讲解SQLAlchemy访问数据库进行增删改查操作
转载自:https://blog.csdn.net/weixin_44232093/article/details/103533891