一、flask入门和视图

news2025/2/21 19:55:27

run启动参数

在这里插入图片描述

模板渲染

在这里插入图片描述

  • 后端给前端页面传参
    在这里插入图片描述
    在这里插入图片描述
  • 前端页面设置css
from flask import Flask, render_template,jsonify

# 创建flask对象
app = Flask(__name__)

# 视图函数 + 路由route
@app.route("/")
def hello_world():
    # 响应,返回给前端的数据
    return "hello world"


# 模板渲染  templates名字固定,存放html静态文件;static名字固定,存放css和js文件
@app.route("/index")
def index():
    # 会自动寻找templates文件夹下的内容
    return render_template("index.html",name="zhangsan ")
    #  返回json
    #  return jsonify({"name":"jj","age":12}) 序列化


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

路由参数

  • 路由:将从客户端发送过来的请求分发到指定函数上。
路由参数:
   string 接收任何没有斜杠('/')的字符串(默认)
   int	接收整型
   float	接收浮点型
   path	接收路径,可接收斜线('/')
   uuid	只接受uuid字符串,唯一码,一种生成规则
   any	可以同时指定多种路径,进行限定
# views.py: 路由 + 视图函数

from flask import Blueprint
from .models import *

# 蓝图
# 第一个参数:蓝图名称,第二个参数:模块名称
blue = Blueprint('user', __name__) # 使用蓝图可以模块化管理路由


@blue.route('/') # 不能使用@app.route 因为@app依赖app = Flask(__name__)
def index():
    return 'index'


# 路由参数
#     string 接收任何没有斜杠('/')的字符串(默认)
#     int	接收整型
#     float	接收浮点型
#     path	接收路径,可接收斜线('/')
#     uuid	只接受uuid字符串,唯一码,一种生成规则
#     any	可以同时指定多种路径,进行限定

# string: 重点
# @blue.route('/string/<string:username>/')
@blue.route('/string/<username>/')
def get_string(username): # 路由的参数必须由函数的参数接收且参数名一致
    print(type(username))  # <class 'str'>
    return username


# int  类型:参数名
@blue.route('/int/<int:id>/')
def get_int(id):
    print(type(id))  # <class 'int'>
    return str(id) # 返回值类型只能是string,dict,list,tuple或者WISG callable

# float
@blue.route('/float/<float:money>/')
def get_float(money):
    print(type(money))  # <class 'float'>
    return str(money)


# path: 支持/的字符串
# localhost:5000/path/he/llo/  返回:he/llo
@blue.route('/path/<path:name>/')
def get_path(name):
    print(type(name))  # <class 'str'>
    return str(name)

# uuid:d12fda71-e885-444a-8cbd-5cdcbcb7c232
@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(type(fruit))  # <class 'str'>
    return str(fruit)


# methods: 请求方式
#   默认不支持POST
#   如果需要同时支持GET和POST,就设置methods
@blue.route('/methods/', methods=['GET', 'POST'])
def get_methods():
    return 'methods'

指定请求方法

# methods: 请求方式
#   默认不支持POST
#   如果需要同时支持GET和POST,就设置methods
@blue.route('/methods/', methods=['GET', 'POST'])
def get_methods():
    return 'methods'

请求和响应

请求

  • Request请求:服务器在接收到客户端的请求后,会自动创建Request对象
    在这里插入图片描述
    在这里插入图片描述
from flask import Blueprint, request, render_template, \
    jsonify, make_response, Response, redirect, url_for, abort
from .models import *

# 蓝图
blue = Blueprint('user', __name__)
# http一次前后端交互:先请求,后响应

# Request: 客户端向服务器发送的请求
@blue.route('/request/', methods=['GET', 'POST'])
def get_request():
    pass
    # print(request)  # <Request 'http://127.0.0.1:5000/request/' [GET]>

    # 重要属性
    print(request.method)  # 请求方式,'GET'或'POST'...
    # GET请求的参数
    #  ImmutableMultiDict: 类字典对象,区别是可以出现重复的key
    # http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=33
    print(request.args)  # ImmutableMultiDict([('name', 'lisi'), ('name', 'wangwu'), ('age', '33')])
    # print(request.args['name'], request.args['age'])  # lisi 33
    # print(request.args.get('name'))  # lisi
    # print(request.args.getlist('name'))  # ['lisi', 'wangwu']

    # POST请求的参数
    # res = requests.post('http://127.0.0.1:5000/request/',data={'name': 'lucy', 'age': 33})
    print(request.form)  # ImmutableMultiDict([('name', 'lucy'), ('age', '33')])
    # print(request.form.get('name'))  # lucy

    # cookie
    # res = requests.post('http://127.0.0.1:5000/request/',data={'name': 'lucy', 'age': 33},cookies={'name': 'hello'})
    print(request.cookies)  # ImmutableMultiDict([('name', 'hello')])

    # 路径
    print(request.path)  # /request/
    print(request.url)   # http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=33
    print(request.base_url)  # http://127.0.0.1:5000/request/
    print(request.host_url)  # http://127.0.0.1:5000/
    print(request.remote_addr)  # 127.0.0.1,客户端的ip

    print(request.files)  # 文件内容 ,ImmutableMultiDict([])
    print(request.headers)  # 请求头
    print(request.user_agent)  # 用户代理,包括浏览器和操作系统的信息 , python-requests/2.28.2

    return 'request ok!'

响应

  • Response响应:服务器返回客户端数据
    在这里插入图片描述
from flask import Blueprint, request, render_template, \
    jsonify, make_response, Response, redirect, url_for, abort
from .models import *

# 蓝图
blue = Blueprint('user', __name__)
# Response: 服务器端向客户端发送的响应
@blue.route('/response/')
def get_response():
    pass
    # 响应的几种方式
    # 1. 返回字符串(不常用)
    # return 'response OK!'

    # 2. 模板渲染 (前后端不分离)
    # return render_template('index.html', name='张三', age=33)

    # 3. 返回json数据 (前后端分离)
    data = {'name': '李四', 'age': 44}
    # return data

    # jsonify(): 序列化,字典=>字符串
    # return jsonify(data)

    # 4. 自定义Response对象
    html = render_template('index.html', name='张三', age=33)
    print(html, type(html))  # <class 'str'>

    # res = make_response(html, 200)
    res = Response(html)
    return res

重定向

在这里插入图片描述

# Redirect: 重定向
@blue.route('/redirect/')
def make_redirect():
    pass
    # 重定向的几种方式
    # return redirect('https://www.qq.com')
    # return redirect('/response/')

    # url_for():反向解析,通过视图函数名反过来找到路由
    #    url_for('蓝图名称.视图函数名')
    # ret = url_for('user.get_response')
    # print('ret:', ret)  # /response/
    # return redirect(ret)

    # url_for传参
    ret2 = url_for('user.get_request', name='王五', age=66)
    return redirect(ret2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1590470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将数学表达式对分子分母先因式分解再约分化简simplify()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数学表达式 对分子分母 先因式分解 再约分化简 simplify() [太阳]选择题 请问以下输出结果正确的是&#xff1a; from sympy import simplify from sympy.abc import x, y A (x**2 2*x 1)…

第07-2章 TCP/IP模型

7.7 TCP/IP模型详解 7.7.1 简介 应用层的PDU>APDU&#xff08;Application PDU&#xff09; 表示层的PDU>PPDU&#xff08;Presentation PDU&#xff09; 会话层的PDU>SPDU&#xff08;Session PDU&#xff09; 7.7.2 TCP/IP协议体系 &#xff08;1&#xff09;TCP…

【尝试】域名验证:配置github二级目录下的txt文件

【尝试】域名验证&#xff1a;配置github二级目录下的txt文件 写在最前面一、初始化本地仓库二、设置远程仓库1. 远程仓库 URL 没有设置或设置错误添加远程仓库修改远程仓库 2. 访问权限问题3. 仓库不存在步骤 1: 在你的仓库中添加文件步骤 2: 确认GitHub Pages设置步骤 3: 访问…

原型模式:复制对象的智能解决方案

在软件开发过程中&#xff0c;对象的创建可能是一个昂贵的操作&#xff0c;特别是当对象的初始化包括从数据库加载数据、进行IO操作或进行复杂计算时。原型模式是一种创建型设计模式&#xff0c;它通过复制现有的实例来创建新的对象实例&#xff0c;从而避免了类初始化时的高成…

高校实习管理系统的设计与实现(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xff0c;容错率低&am…

llama-factory SFT系列教程 (三),chatglm3-6B 命名实体识别实战

背景 llama-factory SFT系列教程 (一)&#xff0c;大模型 API 部署与使用llama-factory SFT系列教程 (二)&#xff0c;大模型在自定义数据集 lora 训练与部署本文为llama-factory SFT系列教程 第三篇 简介 利用 llama-factory 框架&#xff0c;基于 chatglm3-6B 模型 做命名…

Linux内核之自旋锁:自旋锁初始化之spin_lock_init用法实例(四十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

23、链表-反转链表

思路: 第一种方式还是集合方式&#xff0c;用数组装一下&#xff0c;然后从未到头遍历组装就行 第二种方式&#xff1a; 首先构建一个prenull开始遍历 获取nexthead.nexthead.nextpre,将head节点的next指针指向pre&#xff0c;前驱节点pre来到head位置 prehead&#xff1b;…

MySQL索引、B+树相关知识汇总

MySQL索引、B树相关知识汇总 一、有一个查询需求&#xff0c;MySQL中有两个表&#xff0c;一个表1000W数据&#xff0c;另一个表只有几千数据&#xff0c;要做一个关联查询&#xff0c;如何优化&#xff1f;1、为关联字段建立索引二、小表驱动大表 二、b树和b树的区别1、更高的…

一起学习python——基础篇(17)

今天我说一下python中有关文件的操作。 1、检测一个目录里面有无这个文件夹、有无txt文件&#xff0c;代码如下&#xff1a; import os #文件的路径 testPath"D:/pythonFile" testPath2"D:/pythonFile/test.txt" #使用exists()方法检查是否存在文件…

【刷题】图论——最小生成树:Prim、Kruskal【模板】

假设有n个点m条边。 Prim适用于邻接矩阵存的稠密图&#xff0c;时间复杂度是 O ( n 2 ) O(n^2) O(n2)&#xff0c;可用堆优化成 O ( n l o g n ) O(nlogn) O(nlogn)。 Kruskal适用于稀疏图&#xff0c;n个点m条边&#xff0c;时间复杂度是 m l o g ( m ) mlog(m) mlog(m)。 Pr…

要申请开通融资融券账户,有那些条件?

1、什么是融资融券交易? 融资融券交易&#xff0c;又称信用交易&#xff0c;是指投资者向具有融资融券业务资格的证券公司提供担 保物&#xff0c;借入资金买入交易所上市证券&#xff08;融资交易&#xff09;或借入交易所上市证券并卖出&#xff08;融券交易&#xff09; 的…

古月·ROS2入门21讲——学习笔记

第一讲&#xff1a;ROS/ROS2是什么 1. ROS的诞生 对于越来越复杂的智能机器人系统&#xff0c;已经不是一个人或者一个团队可以独立完成的&#xff0c;如何高效开发机器人&#xff0c;是技术层面上非常重要的一个问题&#xff0c;针对这个问题&#xff0c;一群斯坦福大学的有…

根据后端获取到的文档流,下载打开显示“无法打开文件”

原代码&#xff1a; download(item) {this.axios.get(api.download/item.name).then(res > {// console.log(res)let bob new Blob([res.data],{type: application/vnd.ms-excel})const link document.createElement(a);let url window.URL.createObjectURL(bob);link.d…

【JAVA基础篇教学】第四篇:Java条件语句

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第四篇&#xff1a; Java条件语句。 在Java中&#xff0c;条件语句用于根据不同的条件执行不同的代码块。Java提供了if、else if和else等关键字来实现条件判断。 一、if语句 if语句用于执行一个代码块&#xff0c;如果给…

牛客周赛 Round 39(A,B,C,D,E,F,G)

比赛链接 官方题解&#xff08;视频&#xff09; B题是个贪心。CD用同余最短路&#xff0c;预处理的完全背包&#xff0c;多重背包都能做&#xff0c;比较典型。E是个诈骗&#xff0c;暴力就完事了。F是个线段树。G是个分类大讨论&#xff0c;出题人钦定的本年度最佳最粪 题目…

Unity之PUN实现多人联机射击游戏的优化(Section 3)

目录 &#x1f4a3;一、准备工作 &#x1f4a3;二、生成弹头脚本的编写 &#x1f4a3;三、实现发射和伤害同步 手雷都加了在给狗剩加个火箭筒不过分吧。效果看GIF动图&#xff0c;分别是单机和联机的效果。 添加火箭筒依旧是在原有的基础上更改&#xff0c;我查看火箭筒模型…

性能测试-数据库优化二(SQL的优化、数据库拆表、分表分区,读写分离、redis)

数据库优化 explain select 重点&#xff1a; type类型&#xff0c;rows行数&#xff0c;extra SQL的优化 在写on语句时&#xff0c;将数据量小的表放左边&#xff0c;大表写右边where后面的条件尽可能用索引字段&#xff0c;复合索引时&#xff0c;最好按复合索引顺序写wh…

如何解决Uniapp更新数据不重新渲染组件

办法就是在修改数据的函数里面&#xff0c;用let thatthis&#xff0c;再给that用赋值。 原因是给数据赋值的函数没用箭头函数&#xff0c;this是函数自己的this。比如success&#xff08;res&#xff09;{} 或者用箭头函数&#xff0c;比如success&#xff08;res&#xff0…

2024年mathorcup数学建模C题思路分析-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图 ’ 是一个简化的物流 网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同 流向进行分拣并发往下一个场地&#xff0c;最终使包裹…