zoukankan      html  css  js  c++  java
  • 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:地址中需要的参数,可选的
    返回值:字符串,对应的访问地址

  • 相关阅读:
    02_Docker在CentOS 6和CentOS 7下的安装
    01_Docker概念简介、组件介绍、使用场景和命名空间
    nginx配置
    JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》
    关于最近的一些事情
    3、《构》-3习题(6-9)
    关于叛逆的疑问和感想
    2、《构》-3习题(1-5)
    1、随笔+《构》-3
    svn 迁移至git操作手册
  • 原文地址:https://www.cnblogs.com/tianxiong/p/10738817.html
Copyright © 2011-2022 走看看