Flask--框架及路由

一. 基本概念
  1. WEB 服务器端 框架种类
    1. Flask -- 轻量级WEB框架
    2. AJAX -- 异步的技术体现
    3. Django -- 重量级WEB框架

  2. 静态网页 与 动态网页
    1. 静态网页: 无法与服务器做动态数据交互的网页是静态网页
    2. 动态网页: 允许与服务器做动态数据交互的网页是动态网页

  3. WEB 与 服务器
    1. 什么是WEB web即网页
    2. 服务器 - Server
      1. 什么是服务器
        能够给用户提供服务的机器就是服务器,用户群体非常大
   2. 所需 硬件 与 软件 条件    
        1. 硬件
一台主机
             2. 软件
    一个能够接受用户请求并给出响应的程序
    常用的服务器端软件:
   1. APACHE APACHE软件基金会
   2. TOMCAT
   3. IIS - Internet Information Service 微软
   4. Nginx
    3. 作用
   1. 存储web上的信息
   2. 能够处理用户的请求(request)并给出响应(response)
   3. 执行服务器端的处理程序
   4. 具备基本的安全功能(计算机服务器安全性漏洞)

  4. 框架
    1. 什么是框架
   框架是一个为了解决开放性问题而存在的程序结构(基础只有一个: 面向对象(需牢牢掌握))
    2. Python Web 框架
   1. Flask - 轻量级框架(辅助第三方功能多)
   2. Webpy - 轻量级框架
   3. Tornado - 异步框架
   4. Django - 重量级框架(自带功能/库多,强大后台管理)
    3. 框架模式
   1. 框架模式
   框架中各部分组件的交互方式
   2. 常用模式
   1. MTV
   M: Models,模型层(只跟数据库打交道)
   T: Templates,模板层,html
   V: Views,视图层,与用户打交道(请求和响应)
   2. MVC
         M: Models,模型层,与数据库交互
         V: Views,视图层,html
         C: Controller,控制器,与用户打交道(请求和响应)
      M -- M
      T -- V
      V -- C

二. Flask安装
1. 什么是Flask
Flask是一个基于Python并且依赖于Jinja2模板引擎和WerkzeugWSGI服务的微型框架(Micro Framework)
WSGI: Web Server Gateway Interface (WEB服务网关接口)
Flask自带测试服务器
----- 翻译 -----
| | <--WSGI---> | |
| 日 | | 美 |
----- -----
2. 安装
1. 查看已安装版本
进入到python交互模式
>>> import flask
没反应: 导入成功,说明当前解释器有flask
报错: 当前解释器下没有flask需独立安装
2. 安装flask
sudo pip3 install flask
快捷键: alt + 1 隐藏工程目录

三. Flask-路由(route)
1. 什么是路由
路由就是为了匹配用户的请求地址以及对应的视图函数
2. 路由的体现
在Flask中,路由通过 @app.route() 装饰器来表示的
示例:
1. http://localhost:5000
@app.route("/")
def index():
return "xxx"
2. http://localhost:5000/admin/login # 分析出来 "/" 表示哪一部分内容 http://localhost:5000/
@app.route("/admin/login") # 最前的 '/' 表示的网站根目录
def admin_login():
return "xxx"
 1 from flask import Flask
 2 # 将当前的运行的主程序构建成Flask应用,以便接收用户的请求和响应
 3 app = Flask(__name__)
 4 
 5 @app.route('/')
 6 def first():
 7     return "<h1>这是我的网站的首页</h1>"
 8 
 9 # @app.route(),是flask中的路由定义,主要是为了匹配用户的访问路径,‘/’表示的是整个网站的根(域名或ip地址)
10 # ‘index’表示的是自定义的访问路径(可以自由定义)
11 # index(): 表示的是匹配上路径之后的处理程序,视图处理函数(Views),视图处理函数中必须要有一个返回值
12 # 现在阶段必须要返回一个字符串,表示要响应给客户端浏览器的内容
13 @app.route('/index')
14 def index():  # 视图函数,访问必须有返回值
15     a = 3
16     b = 5
17     r = a + b
18     print(r)
19     return "This is my first flask demo!"
View Code

    3. 带参数的路由
参数: 辅助函数进行运算,可表示动态的数据
http://localhost:5000/show/lvzemaria
http://localhost:5000/show/zhexuelv
路由中可以携带参数来表示要传递到视图中的数据 # 通过路由(地址栏)向视图函数传递参数,并做出处理
1. 基本的带参路由
@app.route("/地址/<参数名>") # 参数名为英文的
def xxxx(参数名):
"参数名"表示的就是地址栏中传递过来的参数
示例:
声明访问路径 /show/<参数>, 在视图中将参数值响应给客户端
@app.route("/show/<name>")
def show(name):
# name的数据类型??? # 若没有指定类型,无论输入什么,传入的都为字符串
return "传递进来的参数值为:"+name
1 @app.route("/show/<name>")
2 def show(name):
3     return "传递进来的参数值为:" + name
View Code

        2. 带有多个参数的路由
@app.route("/路径/<参数1>/<参数2>")
def xxxx(参数1,参数2):
参数1: 表示的是第一个参数值
参数2: 表示的是第二个参数值
1 # 路由地址栏传参(多个参数)
2 @app.route('/show/<name>/<gender>')
3 def show(name,gender):
4     print("name的类型为:",type(name))
5     print("gender的类型为:",type(gender))
6     return "姓名:%s,性别:%s" % (name,gender)
View Code

示例:

 1 # 练习:
 2 # 1.创建FlaskDemo01 - exer项目
 3 # 2.创建run.py文件, 并搭建程序结构
 4 # 3.声明一个路由
 5 # http: // 127.0.0.1: 5000 / calc / 数字1 / 数字2
 6 # 将地址栏中的两个数字的 + - * / % 的结果响应给浏览器http: // 127.0.0.1: 5000 / calc / 10 / 5
 7 # 响应:
 8 #     10 + 5 = 15
 9 #     10 - 5 = 5
10 #     10 * 5 = 50
11 #     10 / 5 = 2
12 #     10 % 5 = 0
13 
14 from flask import Flask
15 
16 app = Flask(__name__)
17 
18 @app.route('/calc/<num1>/<num2>')
19 def calc(num1,num2):
20     # 将num1,num2转换为数字
21     num1 = int(num1)
22     num2 = int(num2)
23     # 拼接响应输出的字符串
24     s = "<h1>%d+%d=%d</h1>" % (num1,num2,num1+num2)
25     s += "<h1>%d-%d=%d</h1>" % (num1,num2,num1-num2)
26     s += "<h1>%d*%d=%d</h1>" % (num1,num2,num1*num2)
27     s += "<h1>%d/%d=%d</h1>" % (num1,num2,num1/num2)
28     s += "<h1>%d%%%d=%d</h1>" % (num1,num2,num1%num2)
29     return s
View Code
        3. 指定参数类型的路由
指定参数的类型(内部将数据类型给转换了)
@app.route("/show/<name>/<int:age>")
def show(name,age): # 一般传入参数,def定义的形参要一致
name : 字符串
age : 整数
1 @app.route('/calc/<int:num1>/<int:num2>')
2 def calc(num1,num2):
3     # 拼接响应输出的字符串
4     s = "<h1>%d+%d=%d</h1>" % (num1,num2,num1+num2)
5     s += "<h1>%d-%d=%d</h1>" % (num1,num2,num1-num2)
6     s += "<h1>%d*%d=%d</h1>" % (num1,num2,num1*num2)
7     s += "<h1>%d/%d=%d</h1>" % (num1,num2,num1/num2)
8     s += "<h1>%d%%%d=%d</h1>" % (num1,num2,num1%num2)
9     return s
View Code

            int: 类型转换器
Flask中所支持的类型转换器:
类型转换器 作用
缺省 字符串,不能有斜杠(/) # 如果没有类型转换器,则默认为字符串
int: 整数
float: 浮点数
path: 字符串,允许有斜杠(/)

4. 多url的路由匹配
允许让多个url地址匹配到同一个视图处理函数
http://localhost:5000/
http://localhost:5000/index
http://localhost:5000/default

# 就相当于视图处理函数外层包了多个装饰器(url)
@app.route("/")
@app.route("/index")
@app.route("/default")
def index():
xxx xxxx
return "xxx"
 1 # 练习:
 2 # 当访问路径是以下任意一种的时候:
 3 # localhost: 5000 /
 4 # localhost: 5000 / index
 5 # localhost: 5000 / 数字
 6 # localhost: 5000 / index / 数字
 7 # 响应给客户端的内容为:
 8 #   如果路由中有数字传递的话
 9 #       响应: 您当前要看的页数为第xx页
10 #   如果路由中没有数字传进来
11 #       响应: 您当前要看的页数为第1页
12 
13 from flask import Flask
14 
15 app = Flask(__name__)
16 
17 @app.route('/')
18 @app.route('/<int:page>')
19 @app.route('/index')
20 @app.route('/index/<int:page>')
21 def index(page=1):
22         return "您当前要看的页数为第%d页" % page
23 
24 if __name__ == "__main__":
25     app.run(debug=True)
View Code
   5. URL的反向解析
正向解析:程序自动解析,根据@app.route()中的访问路径,来匹配处理函数
反向解析:通过视图处理函数的名称生成对应的访问路径

在Flask中实现反向解析:
from flask import url_for
语法:
url_for(funName[,args])
funName:要生成地址的函数名
args:地址中需要的参数,可选的
返回值:字符串,对应的访问地址

原文地址:https://www.cnblogs.com/tianxiong/p/10738817.html