[Flask]环境配置和项目框架的构建

news2024/12/23 12:03:22

一、配置flask

        在Python环境下使用控制台的pip install命令进行安装

pip install Flask==2.1.0

                !!!安装版本必须是2.x以上,否则可能出现错误:cannot import name 'escape' from 'jinja2' (flask 2.x放弃了对jinjia2的支持所以不会出现此问题)

        本文中所有操作均基于vscode,如需了解vscode如何配置请参见之前的博客:在VS Code下搭建PyTorch环境https://blog.csdn.net/weixin_37878740/article/details/127069779

二、创建项目

        直接新建一个py文件(对,直接新建,不用参照网上什么乱七八糟的改配置文件),在其中输入以下代码:

from flask import Flask        #导入Flask包
app = Flask(__name__)

@app.route('/')                #设置路由
def hello_world():
    return "Hello World"

if __name__ == "__main__":     #启动程序
    app.run()

        按F5启动后用浏览器访问控制台下出现的网址即可。控制台也会实时接显示收到的http命令

         其中@app.route和后面的视图函数映射为其主要功能区块,通过更改路由路径即可实现不同路径的不同返回。

@app.route('/Fxxk')
def Fxxk():
    return "So, Nivda Fxxk U"

 三、参数设置

        ①Debug模式

                启用Debug模式后可以实现实时修改实时查看,否则必须重启项目才能查看修改部分。

                有两种启动方法

app.debug = True
app.run()
app.run(debug=True)

                看到控制台有以下显示即开启成功

         ②修改Host和Port

                同上可以采用两种方法,这里展示方法2。同时,申请的端口号必须是没有被占据的端口号,比如你申请192.168.1.1就会报错。

app.run(host='127.0.0.2',port=5003,debug=True)

 四、URL传参

        ①直接传参

@app.route('/login/<id>')
def LogIn(id):
    return "欢迎回来{}".format(id)

                 如出现错误:发生异常: SystemExit。可将调试器中的此项关闭

                 如需要指定类型可以在参数前添加类型指定,如:

@app.route('/login/<int:id>')
def LogIn(id):
    return "欢迎回来{}".format(id)

                常见的类型如下:

string字符串型,但是不能接受/
int整型
float浮点型
path字符串路径,可以接受/
uuidUUID类型,有一组32位的16进制数据构成
any备选值中的任何类型,类似于枚举,示例:<any(a,b,c):type>

        ②Request传参

                需要导入request包

from flask import request
@app.route('/book/list')
def book_list():
    page = request.args.get("page",default=1,type=int)      #参数名,默认参数,参数类型
    return "您要查看的是{}页".format(page)

                           

五、渲染HTML文件

        ①渲染静态文件

                新建一个html文件,按照惯例建议存放在工程文件目录下的templates文件夹下。

                在Python代码中需要导入render_template,随后在视图映射函数中将返回修改为:

@app.route('/')
def hello_world():
    return render_template("index.html")

                函数会自动在templates文件夹下查找同名的文件并渲染返回给浏览器 。

         ②渲染动态文件

                获取参数的方式与第四章URL传参一致,但是需要使用render_template进行参数传递,即在页面后面将参数赋值给页面即可

@app.route('/login/<id>')
def LogIn(id):
    return render_template("login.html",id = id)

                随后在页面中也需要进行相应的操作,使用双花括号括住需要的变量名即可

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>∞</title>
    </head>
    <body>
        <h1>您登录的账号为:{{id}}</h1>
    </body>
</html>

         ③访问自定义类型

                如果需要通过自定义类型传递数据的话,仅需要将类作为参数传递给html,然后在html中使用类型名.属性名的方法访问即可。

class User:
    def __init__(self,username,email):
        self.username=username
        self.email=email

@app.route('/IKUN')
def LogIn():
    user = User(username="iKun",email="JNTM@kun.com")
    return render_template("login.html",user=user)
<h1>您的账号为:{{user.username}}</h1>
<h1>您的邮箱为:{{user.email}}</h1>

                 但如果传递的是Json字典的话,则在HTML文件中可以使用两种方法对其进行访问:

                        ①类型名.属性名

                        ②类型名['属性名']

user = {
            "username":"iKun",
            "email":"JNTM@kun.com"
        }
<h1>您的账号为:{{user['username']}}</h1>
<h1>您的邮箱为:{{user.email}}</h1>

        ④过滤器

                过滤器可以在HTML页面中进行一些检查的数据处理,使用过滤器需要借助管道操作符 | ,来实现,在HTML中做如下修改

<h1>您的账号长度为{{user.username|length}}</h1>

                Jinja2具体过滤器的种类以及功效请参见HTML专题(别点了,还没写呢)

        自定义过滤器:过滤器的本质是python代码,所以也可以在python文件中进行自行编写,定义方法如下:

def Datefomat(value,format="%Y年%m月%d日 %H:%M"):
    return value.strftime(format)

                 value为需要处理的值,必不可少,其他的看需求自行定义。

                随后使用app.add_template_filter将该过滤器添加到模板中,参数1为函数名,参数2为在HTML中调用的名称。

app.add_template_filter(Datefomat,"dformat")

                随后在HTML中和普通过滤器一样调用即可。

<h1>当前时间为:{{Now|dformat}}</h1>

         ⑤控制语句

                Jinja2模板中包含两组控制语句:if-else和for。

{ % if 条件 % }
    接实现的HTML
{ % elif 条件 % }
    接实现的HTML
{ % else 条件 % }
    接实现的HTML
{ % endif % }

                注意:必须要有endif结尾,否则会报错

{% for book in books %}
    <div>图书名称{{book.name}},作者{{book.author}}</div>
{% endfor %}

                同样需要结尾收束,且不能中途中断。

        ⑥加载静态文件

                静态文件需置于static文件夹下,可在控件中使用文件路径的方式进行加载。这里以图片为例。

                 将图片路径作为网页参数传递。

@app.route('/Img')
def LoadImg():
    imgId = request.args.get("id",type=str)
    return render_template("Loader.html",imgId = imgId)

                HTML中以url_for进行加载,第一个参数默认为static 

<img src="{{url_for('static',filename=imgId)}}" alt="">

                同时也可加载js脚本

<scrip src="{{url_for("static",filename='js/my.js')}}"/>

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

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

相关文章

CloudCompare 的简单的使用说明

File open&#xff1a;打开 save&#xff1a;保存 Global Shift settings&#xff1a;设置最大绝对坐标&#xff0c;最大实体对角线 Primitive Factory&#xff1a;对点云进行原始加工&#xff0c;改变原始点云的形状 3D mouse&#xff1a;对3D鼠标&#xff08;如3Dconnexion&a…

二叉树的绘制

目录 一、知乎方法 二、动手实践 DOT 语言 无向图 有向图 绘制二叉树 设置属性 如何绘制优美的二叉树 一、知乎方法 知乎上的大佬提供了一系列画图的方法&#xff0c;感兴趣的朋友可以自行去看看 用 Graphviz 绘制一棵漂亮的二叉树 - 南浦月 二叉搜索树&#xff0c…

庖丁解牛式讲解并发编程,GitHub高星最新开源阿里Java进阶必备手册

最近看到粉丝群里讨论最多的问题是现在Java这么卷&#xff0c;担心年龄大了以后会被裁员或者清退&#xff0c;要怎么做才能保住自己的“饭碗”。楼主认为不论是阅读优秀源码、领略设计思路&#xff0c;还是学习优秀架构、代码设计等等&#xff0c;都是加薪升职的正确路径&#…

安全分析开发环境 技术背景

安全分析开发环境一键部署 Gartner 报告中指出 [7]&#xff0c;Platfor m Ops for AI 是一种编排和扩展运营人工智能的方法&#xff0c;利用跨数据、机器学习、人工智能和应用程序 开发管道的多种最佳实践&#xff0c;为基于人工智能的系统创建一个高效的交付模型。Platform O…

RV1126笔记十七:吸烟行为检测及部署<四>

若该文为原创文章&#xff0c;转载请注明原文出处。 转换成onnx模型(windows) 一、查看pt文件 准备好训练好的pt文件,可以用Netron打开看看大概长啥样: 二、模型转换 主要的目的是想把训练好的pt文件转成onnx模型&#xff0c;为后面RV1126的部署做铺垫。 我们是在py38的con…

ChatGPT怎么突然变得这么强?华人博士万字长文深度拆解GPT-3.5能力起源

文章目录一、2020 版初代 GPT-3 与大规模预训练二、从 2020 版 GPT-3 到 2022 版 ChatGPT三、Code-Davinci-002和 Text-Davinci-002&#xff0c;在代码上训练&#xff0c;在指令上微调四、text-davinci-003 和 ChatGPT&#xff0c;基于人类反馈的强化学习的威力五、总结当前阶段…

SAP MM SPED输出报错-No authorization for delivery from shipping point US##-之对策

SAP MM SPED输出报错-No authorization for delivery from shipping point US##-之对策 前日收到某客户业务人员上报的一个问题&#xff0c;说是发现某个公司间STO单据的外向交货单里SPED 这个output不成功&#xff0c;不能成功触发inbound delivery单据。 相关报错信息如下&am…

项目实战之旅游网(四)后台角色管理(上)

目录 一.角色列表 二.新增角色 三.修改角色 四.删除角色 一.角色列表 接下来我们编写角色管理功能&#xff0c;首先查询角色列表: 1.编写RoleService Service public class RoleService {Autowiredprivate RoleMapper roleMapper;public Page<Role> findPage(int …

【无线通信】鲸鱼优化算法及其在无线网络资源分配中的应用(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

腾讯云Linux 轻量应用服务器如何搭建 FTP 服务?

Vsftpd&#xff08;very secure FTP daemon&#xff09;是众多 Linux 发行版中默认的 FTP 服务器。本文以 CentOS 7.6 64位操作系统的轻量应用服务器为例&#xff0c;使用 vsftpd 软件搭建 Linux 轻量应用服务器的 FTP 服务。 本文搭建 FTP 服务组成版本如下&#xff1a; Lin…

node.js+uni计算机毕设项目基于微信点餐系统小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

Allegro如何设置格点操作指导

Allegro如何设置格点操作指导 在PCB设计的时候,格点是一个很好用的工具,Allegro可以设置格点 具体操作如下 选择Setup-GirdsNon-Etch和All Etch中的X和Y都输入5,代表都是5的格点

CTF-MISC(入门|笔记|工具)

文章目录音频隐写直接隐写频谱隐写流量分析第一种流量包修复第二种是协议分析第三种数据提取图片分析zstegBMPPNGforemost 工具binwalksteghidestegslovetweakpngJPGF5-steganographystegdetect压缩包分析zip伪加密crc32zip包明文攻击其它条形码扫描pyc反编译数据转换到ASCII乱…

2022年安徽建筑施工电工(建筑特种作业)模拟试题及答案

百分百题库提供特种工&#xff08;电工&#xff09;考试试题、特种工&#xff08;电工&#xff09;考试真题、特种工&#xff08;电工&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 149.使⽤绝缘操作杆时&#xff0c;下列…

NTZ改机原理全公开(二)-- 实现篇

最核心的逻辑就是代码hook了,找这些hook点可不是一件容易的事情,但是借鉴这个事情就容易得多。这批文章就将这些hook列出来,帮大家节省时间。 主要的hook点为: 音频build属性连接上下文文件访问位置信息其他包管理传感器设置磁盘信息系统时钟系统属性电话相关wifi信息wifi…

uniapp微信小程序 引入腾讯视频插件

参考&#xff1a;微信小程序&#xff08;或uniapp&#xff09;引入腾讯视频插件播放视频_苏苏哇哈哈的博客-CSDN博客_微信小程序播放腾讯视频1.在manifest.json里面 "plugins": { "tencentvideo": { …

计算机图形学 着色(shader) 学习笔记

画家算法&#xff1a;从远到近的光栅化&#xff0c;近的物体的着色覆盖远的物体的着色&#xff0c;近的物体的RGB优先 实际计算机图形学使用的是Z-Buffer深度缓冲 先看地板&#xff0c;地板要渲染的像素先放进二位数组内&#xff0c;接下来要看正方体&#xff0c;正方体与之前…

前端路由应该理解的一些前置知识

1. URI和URL 与URI相比,我们更熟悉URL。URL正是使用web浏览器等访问web页面时需要输入的网页地址。比如我们经常输入的 https://www.baidu.com/ 就是 URL 1.1 统一资源标识符 URI是 Uniform Resource Identifier 的缩写。RFC2396分别对这三个单词进行了以下定义: Uniform …

Spring的基础用法

前言 上面的目录内容本文章不一定都会写到&#xff0c;本次的文章将非常简略&#xff0c;主写主要内容&#xff0c;次要内容需要读者有一定的学习基础才可以看懂以及掌握&#xff0c;本文章比较偏向于理论复习&#xff0c;注意是理论&#xff0c;本文章代码不多&#xff0c;代…

【python】异常处理及程序调试(一)

异常类和异常处理 一、程序的错误类型 语法错误&#xff1a;不符合语法规则而产生的错误&#xff0c;如&#xff1a;标识符命名错误&#xff0c;缩进错误&#xff0c;访问未定义的变量等。这类错误在编辑或解释时就会被检测出来&#xff0c;产生这类错误&#xff0c;程序将会…