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方式进行测试

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


app.run()

测试结果

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

使用gunicorn测试

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

1、安装 flask 和 gunicorn

[root@wangsh python_test]# pip3 install flask
[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核心对象

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

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

 Flask路由查找

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

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

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

# #############################flask路由
# 路由表示为用户请求的url找出其对应的处理函数的意思

from flask import Flask
# 通常实例化的时候要传入一个import_name,通常使用__name__
# 生成flask核心对象,
htapp = Flask(__name__)

@htapp.route("/")
def index():
    return "this is index"

@htapp.route("/sc/xx/yy", endpoint="sc_index")
def index():
    return "this is index"


htapp.run()

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

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

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

 

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

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

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

 

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

新建两个文件夹 static  和  templates

 先编写html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
<h1>图片展示</h1>
<img src="{{ url_for('static', filename='images/1.jpg')}}">
<h1>文本展示</h1>
<p>姓名:{{ content.name}}</p>
<p>年龄:{{ content.age}}</p>
</body>
</html>

 然后编写返回页面函数  

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

 

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值