【教程】Python Flask快速学习

备注

2021/3/28 星期日
简单学习了一下python web开发,选择了使用最简单的flask框架,这里记录一下

一、概念

flask框架是一个很简单的python web框架,类似的框架还有django和fastapi,flask的优势是简单易上手,方便进行一些不太复杂场景的开发。

二、核心结构

flask只需要最简单的几行代码就可以运行一个web程序,这也是flask的核心结构,后续更加复杂的开发都是建立在这个结构基础上的

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'hello world'

if __name__ == '__main__':
    app.run()

1.启动参数

可以在app.run()中指定主机名、端口号和debug模式

app.run(host="localhost", port=5000, debug=Ture)

2.路由

注解:
路由是url和所需要执行代码的映射关系,可以使用@注解符进行声明,同时可以methods指定允许的方法,如果不指定默认只支持GET方法

@app.route("/path", methods=["GET", "POST"])

如果路由路径需要使用变量可以使用<>包裹变量名进行变量提取

@app.route("/path/<id>")

传入的变量默认为string类型,可以使用转换器将变量转换为其他类型,同时要记得在处理函数中声明对应名称的变量

@app.route("/path/<类型:id>")
def index(id):
	return 'index'
类型说明
string不允许包含/的字符串
int整数
float正浮点数
path允许包含/的字符串
uuid通用唯一识别码是一个固定格式
any仅允许枚举中的值,例如:/path/<any(type1,type2):id>

蓝图:
再更加复杂的项目中也可以使用蓝图作为中间变量传递路由,以防止出现循环引用

from flask import BluePrint
bp = BluePrint('蓝图名', __name__)
@bp.route("/")
def index():
	return 'index'
app.register_buleprint(buleprint = bp)

三、请求处理

1.获取请求类型

2.获取请求路径

3.获取请求协议

4.获取请求头

5.获取请求数据

get请求:
get请求中的参数为args,再使用get()方法获取所需键的值即可

data = request.args.get('key')

post请求:
post请求的数据有键值对和json两类常见格式,分别使用不同方式获取

# 对于键值对形式的数据
data = request.form.get('key')
# 数据为json格式,获取json格式数据有两种方式
data = request.json.get('key')

## 6.示例
```python
@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'GET':
    	# 相同效果二选一
        data = request.args.get('key')
        data = request.values.get('key')
    if request.method == 'POST':
        if request.content_type == 'application/json':
            # 相同效果二选一
            data = request.json.get('key')
            data = request.get_json()['key']
        elif request.content_type == 'application/x-www-form-urlencoded':
            data= request.values.get('key')
        elif request.content_type == 'multipart/form-data':
        	 # 相同效果二选一
            data = request.form.get('key')
            data = request.form['key']
		else:
			data = request.get_data()
	return data

四、响应设置

1.设置状态码

2.设置响应头

3.设置响应体

提供了jsonify方法将字符串转化为json格式
提供了render_template方法将渲染html页面
提供了redirect方法将访问重定向到目标网站

4.模板语法

前后端不分离的情况,使用jinja2语法
变量 {{}} 直接将变量传递给html
过滤器 | 类似Linux管道符直接执行函数
自定义过滤器 定义函数再使用add_template_filter进行添加

app.add_template_filter(函数名, "过滤器名")

五、数据库连接池

数据库创建

import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='name', passwd='password', charset='utf-8', db='database')
cursor = conn.cursor()
cursor.execute("select * from table")
res = cursor.fetchone()
cursor.close()
conn.close()

dbutils

import dbutils
dbpool = PooledDB(creator=pymysql, maxconnections=10, maxcached=5, mincached=2, blocking=True, setsession=[], ping=0)

参数列表

参数作用
creator使用的连接模块
maxconnections允许连接的最大数量,0表示不限制
maxcached连接池中最多空闲连接数量,0表示不限制
mincached初始化时最少创建空闲连接数量,0表示不创建
blocking没有空闲连接时是否等待,True等待,False不等待直接报错
setsession开始会话前执行的命令列表
ping定期ping数据库是否可用,0表示不进行
其余创建连接中用到的参数如:host、port、user、passwd、charset、db等

六、结构拆分

对于大项目需要对项目的结构进行拆分,常见的结构如下:

└─项目名
    └─模块名
        └─static
        └─template
        └─__init__.py
        └─models.py
        └─views.py
    ...
    └─模块名
        └─static
        └─template
        └─__init__.py
        └─models.py
        └─views.py
    └─app.py
文件
static保存css、js等静态资源
template保存html文件
init.py初始化
models.py用于连接数据库
views.py用于路由和视图函数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值