• Flask项目 - 01、项目有关知识 - flask路由查找


    目录

    web开发知识

    如何动态生成html?如何接受http请求,解析http请求,发送http响应?

    专门的 WSGI 服务器 -- python web服务器 -- gunicorn , uwsgi

     web开发 模式

     Flask框架

     虚拟环境

    使用gitee来创建虚拟环境

     在Pycharm里面设置刚才虚拟环境的解释器

     使用app.run方式进行测试

    使用gunicorn测试

    1、安装 flask 和 gunicorn

    2、在linux下测试gunicorn

     Flask路由查找

     动态url  --  使用methods指定http访问方法,如果方法不被允许会返回405异常

     构造url - url_for  --  根据endpoint得到对应的url

     返回html页面  --  使用 render_template函数


    web开发知识

    1、web开发 网站 工具平台

    2、基于http协议

    3、web服务器  nginx只支持 -- 静态服务器 -- 展示静态页面

    4、后端api开发 (前端-- 用户看到的界面(html,css,js) 后端 -- 业务逻辑 -- flask)

    如何动态生成html?如何接受http请求,解析http请求,发送http响应?

             这些tcp,http原始请求和响应应该有专门的的服务器软件实现,我们只需要关心业务逻辑就可以了需要统一的接口规则,去让python应用的web服务器与python编写web业务之间做一个统一

    这个接口就是 : WSGI(Python Web Server Gateway Interface) 它是python语言定义的web服务器和web应用程序或框架之间一种简单而通用的接口规范

    专门的 WSGI 服务器 -- python web服务器 -- gunicorn , uwsgi

     gunicorn -- 跑整个逻辑 配置简单,能做到高并发

    uwsgi  --  配置复杂点

     web开发 模式

    1、mvc 设计模式

            模型(Model):数据保存

            视图(View):用户界面展示

            控制器(Controller):业务逻辑处理

    2、前后端分离 api(用户程序接口) 前后端分离 -- 提高效率

     Flask框架

    flask 和 Django 是python中常用web框架之一
    
    flask             vs         django
    轻量级(需要什么就装什么)        重(有很多东西都已经集成好,不管需不需要)
    自由、灵活、扩展性强             笨重,不灵活
    适合web服务 api开发

     

     ########################################################################## 

     虚拟环境

    它是一个虚拟化,从电脑独立开辟出来的环境。python虚拟环境可以理解为真实环境的一个副本,在这个虚拟环境下安装的模块不会影响全局环境,

    反过来,如果开启python虚拟环境的话,全局环境也不会对虚拟环境产生影响,相当于一个独立的空间。

    好处:当我们同时开发多个项目的时候,如果没有使用虚拟环境,不同的项目会将第三方的包存放在相同的路径下,如果有两个工程依赖同一个包,但是所需要的版本却不一样

    就会发生冲突,Python虚拟环境的主要目的是为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个项目都有自己的依赖包,而与其它的项目无关。不同的虚拟环境中同一个包可以有不同的版本,可以使用pycharm,git来创建虚拟环境

    使用gitee来创建虚拟环境

     在Pycharm里面设置刚才虚拟环境的解释器

    因为我们在git里面已经生成了虚拟环境,所以可以直接在pycharm里面修改全局解释器为虚拟环境里面的解释器

     

     ########################################################################## 

     使用app.run方式进行测试

    1. from flask import Flask
    2. # 通常实例化的时候要传入一个import_name,通常使用__name__
    3. # 生成flask核心对象,app就是核心对象
    4. app = Flask(__name__)
    5. # 有专门的服务器来运行flask,app.run只能测试用的,不能用作生产环境
    6. # app.run()
    7. #
    8. #
    9. # # 路由也是要绑定到app核心对象
    10. @app.route("/")
    11. def index():
    12. return "this is index"
    13. app.run()

    测试结果

     ##########################################################################

    使用gunicorn测试

    注意:gunicorn要放到linux环境下运行,在windows会报错。 

    1、安装 flask 和 gunicorn

    1. [root@wangsh python_test]# pip3 install flask
    2. [root@wangsh python_test]# pip3 install gunicorn

    2、在linux下测试gunicorn

    gunicorn -w 4 -b 0.0.0.0:8000 server:app
    

     -w  4   :开启4个进程

    -b 0.0.0.0:8000  绑定本机0.0.0.0的8000端口

    server:app  :  server文件的app核心对象

    1. [root@wangsh python_test]# gunicorn -w 4 -b 0.0.0.0:8000 server:app
    2. [2022-08-15 14:59:53 +0800] [7374] [INFO] Starting gunicorn 20.1.0
    3. [2022-08-15 14:59:53 +0800] [7374] [INFO] Listening at: http://0.0.0.0:8000 (7374)
    4. [2022-08-15 14:59:53 +0800] [7374] [INFO] Using worker: sync
    5. [2022-08-15 14:59:53 +0800] [7377] [INFO] Booting worker with pid: 7377
    6. [2022-08-15 14:59:53 +0800] [7378] [INFO] Booting worker with pid: 7378
    7. [2022-08-15 14:59:53 +0800] [7379] [INFO] Booting worker with pid: 7379
    8. [2022-08-15 14:59:53 +0800] [7380] [INFO] Booting worker with pid: 7380

     ##########################################################################

     Flask路由查找

     当用户访问时,先在url_map里面找有没有请求的url,如果没有就会抛出404错误

    找到对应的url后,再找对应的endpoint

    然后再在view_function字典里面找对应endpoint的视图函数

    1. # #############################flask路由
    2. # 路由表示为用户请求的url找出其对应的处理函数的意思
    3. from flask import Flask
    4. # 通常实例化的时候要传入一个import_name,通常使用__name__
    5. # 生成flask核心对象,
    6. htapp = Flask(__name__)
    7. @htapp.route("/")
    8. def index():
    9. return "this is index"
    10. @htapp.route("/sc/xx/yy", endpoint="sc_index")
    11. def index():
    12. return "this is index"
    13. htapp.run()

     ########################################################################## 

     动态url  --  使用methods指定http访问方法,如果方法不被允许会返回405异常

    1. @htapp.route('/v1/user/', methods=["POST", "GET"])
    2. def show_userid(user_id): # 如果是动态url 这里需要接受参数
    3. return f"user_id is {user_id}"

     

     ########################################################################## 

     构造url - url_for  --  根据endpoint得到对应的url

    1. from flask import url_for
    2. @htapp.route("/urlfor")
    3. def geturl():
    4. result = url_for('show_userid', user_id=10)
    5. return f"index2 endpoint route is {result}"

     

     返回html页面  --  使用 render_template函数

    新建两个文件夹 static  和  templates

     先编写html页面

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>测试title>
    6. head>
    7. <body>
    8. <h1>图片展示h1>
    9. <img src="{{ url_for('static', filename='images/1.jpg')}}">
    10. <h1>文本展示h1>
    11. <p>姓名:{{ content.name}}p>
    12. <p>年龄:{{ content.age}}p>
    13. body>
    14. html>

     然后编写返回页面函数  

    1. # 返回页面 -- render_template -- 渲染函数,生成动态页面的。
    2. from flask import url_for,render_template
    3. @htapp.route("/img")
    4. def getimg():
    5. user = {"name":"sc","age":18}
    6. result = render_template('index.html', content = user)
    7. return result

     

     开启debug功能       --    开启后修改代码就不用再重新执行。

    1. # 内置小型web服务器配置
    2. htapp.debug = True # 开启debug模式,只用作测试环境
    3. # 或者还可以指定 ip和端口
    4. htapp.run(debug=True, host='0.0.0.0', port=8000)
    5. # htapp.run()

     

     

  • 相关阅读:
    北斗三号短报文终端在大坝安全监测方案的应用
    2023常见自动化测试工具集合
    Open3D(C++) K均值聚类
    不爱生活的段子手不是好设计师|ONES 人物
    iTOP-3568开发板Ubuntu下安装ADB工具
    Linux环境如何彻底卸载感干净RabbitMQ并重新安装
    Zabbix“专家坐诊”第203期问答汇总
    JS垃圾回收
    前端面试基础题——12
    这个保护数据隐私的赛道,人人都想插一脚,互联网大厂挤破头,连甲方都下场自研了...
  • 原文地址:https://blog.csdn.net/qq_48391148/article/details/126343300