Flask-入门与视图
安装flask2
pip install flask==2.2.3
第一个Flask项目
创建helloflask.py文件,写入以下代码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
run的参数:
if __name__ == '__main__':
# 启动
app.run(debug=True, port=5001, host='0.0.0.0')
# run()启动的时候还可以添加参数:
# debug 是否开启调试模式,开启后修改过python代码会自动重启
# port 启动指定服务器的端口号,默认是5000
# host 主机,默认是127.0.0.1,指定为0.0.0.0代表本机所有ip
Flask的模板渲染
from flask import Flask, render_template, jsonify
# 模版渲染
@app.route('/index/')
def index():
# 返回字符串:支持HTML标签
# return '<b>Flask Index</b>'
# 模版渲染
return render_template('index.html', name='Jack')
#JSON
# return {'name': '张三', 'age': 33}
# 或加jsonify 序列化(字典=>字符串)
# return jsonify({'name': '张三', 'age': 33})
Flask项目拆分
在code目录新建以下目录:
FlaskPro03_项目拆分
App
static
templates
__init__.py
models.py
views.py
app.py
app.py:
from App import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
App/init.py
# __init__.py : 初始化文件,创建Flask应用
from flask import Flask
from .views import blue, blue2
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blue)
app.register_blueprint(blue2)
return app
App/views.py
# views.py: 路由+视图函数
from flask import Blueprint
from .models import *
# 蓝图
blue = Blueprint('user', __name__)
blue2= Blueprint('product', __name__)
@blue.route('/')
def index():
return 'index'
@blue2.route('/goods/')
def index():
return 'goods'
蓝图Blueprint
1、宏伟蓝图(宏观规划)
2、蓝图也是一种规划,主要用来规划urls(路由route)
3、蓝图基本使用
在views.py中初始化蓝图
blue = Blueprint('user', __name__)
在init文件中调用蓝图进行路由注册
app.register_blueprint(blueprint=blue)
路由参数
route路由
路由:
将从客户端发送过来的请求分发到指定函数上
路由通过装饰器对应视图函数,并且可以接受参数,所以我们只需要在视图函数上使用装饰器即可。
# 路由参数
# string 接收任何没有斜杆(’/’)的字符串(默认)
# int 接收整型
# float 接收浮点型
# path 接收路径,可接收斜杆(‘/’)
# uuid 只接收uuid字符串,唯一码,一种生成规则
# any 可以同时指定多种路径,进行限定
# string: 重点
# @blue.route('/string/<string:name>/')
@blue.route('/string/<name>/')
def get_string(name):
print(type(name))
return name
# int
@blue.route('/int/<int:id>/')
def get_int(id):
print(type(id))
return str(id)
# float
@blue.route('/float/<float:money>/')
def get_float(money):
print(type(money))
return str(money)
# path: 支持/的字符串
@blue.route('/path/<path:name>/')
def get_path(name):
print(type(name)) #<class 'str'>
return str(name)
# uuid: 8c81dd67-31da-4031-a2b1-d5a72ea20ab1
@blue.route('/uuid/<uuid:id>/')
def get_uuid(id):
print(type(id)) #<class 'uuid.UUID'>
return str(id)
@blue.route('/getuuid/')
def get_uuid2():
import uuid
return str(uuid.uuid4())
# any: 从列出的项目中选择一个
@blue.route('/any/<any(apple, orange, banana):fruit>/')
def get_any(fruit):
print(fruit)
return str(fruit)
请求方法:
默认支持GET,HEAD,OPTIONS,如果想支持某一请求方式,需要自己手动指定
# methods: 请求方式
# 默认不支持POST
# 如果需要同时支持GET和POST,就设置methods
@blue.route('/methods/', methods=['GET', "POST"])
def get_methods():
return 'methods'
methods中可以指定请求方法:
GET POST HEAD PUT DELETE
请求和响应
Request
服务器在接收到客户端的请求后,会自动创建Request对象
由Flask框架创建,Request对象不可修改
属性:
url 完整请求地址
base_url 去掉GET参数的URL
host_url 只有主机和端口号的URL
path 路由中的路径
method 请求方法
remote_addr 请求的客户端地址
args GET请求参数
form POST请求参数
files 文件上传
headers 请求头
cookies 请求中的cookie
user_agent 用户代理,包括浏览器和操作系统的信息
request.agrs:
ImmutableMultiDict类型:类字典对象,区别是可以出现重复的key
ImmutableMultiDict([('name', 'lisi'), ('name', 'wangu'), ('age', '33')])
(url: http://127.0.0.1:5000/request/?name=lisi&age=33&name=wangu)
取值:
print(request.args['name'], request.args['age']) #只获取第一个
print(request.args.get('name')) #只获取第一个
print(request.args.getlist('name'))
request.form:
print(request.form) # ImmutableMultiDict([('name', 'lucy'), ('age', '33')])
print(request.form.get('name')) # lucy
request.cookies:
ImmutableMultiDict类型
对应的网络请求
import requests
# res = requests.get('http://127.0.0.1:5000/request/?name=lisi&age=33&name=wangu', cookies={'name':'hello'})
# print(res.text)
res = requests.post('http://127.0.0.1:5000/request/', data={'name': 'lucy', 'age': 33})
print(res.text)
Response
# Response
@blue.route('/response/')
def get_response():
# 1、返回字符串
# return 'hello'
# 2、模版渲染
# return render_template('index.html', name='jlkljkjkl')
# 3、返回json数据
# data = {'name':'李四', 'age':11}
# return data
# jsonify(): 序列化
# return jsonify(data)
# 4、自定义Response对象
html = render_template('index.html', name='李四')
# res = make_response(html, 200)
res = Response(html)
return res
重定向
# Redirect: 重定向
@blue.route('/redirect/')
def make_redirect():
# 重定向的几种方式
# return redirect('https://www.baidu.com')
# return redirect('/response/')
# url_for('蓝图名称.视图函数名') 反向解析,通过视图函数名反过来找到路由
# ret = url_for('user.get_response')
# print(ret)
# url_for传参
ret2 = url_for('user.get_request', name='wangwu', age= 9)
return redirect(ret2)
合集:
Python全栈(Flask)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库