IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python-Flask入门,路由route、项目启动、修改网址端口、获取URL地址和参数、Form数据 -> 正文阅读

[Python知识库]Python-Flask入门,路由route、项目启动、修改网址端口、获取URL地址和参数、Form数据

#1、Flask路由基础设置

我们在创建好Python-Flask项目后,就可以开始设置路由route。还不会创建Flask项目的小伙伴可以参考前一篇内容。Python-Flask,Anaconda结合Pycharm打造第一个“Hello World“程序_无敌路路帅气的博客-CSDN博客Python-Flask,Anaconda结合Pycharm打造第一个"Hello World"程序https://blog.csdn.net/m0_59562547/article/details/125599134

现代Web应用都会使用有意义的网址URL,而路由的作用就是用@app.route()修饰器来把函数绑定到URL,相当于建立URL网络地址和程序函数的映射关系。我们通过访问URL地址,就能调用相关后端程序,实现相应的功能了。

如下例:Hello路由,返回字符串Hello World;

index路由,返回字符串Index Page。

当项目启动后,我们访问http://localhost:5000/?,网页返回Hello World。

http://localhost:5000/hello?,网页返回Index Page。

Flask项目默认端口是5000。

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'

#2、Flask项目启动?

2.1 在Pycharm等IDE中直接启动项目。

我们可以在app.py(根程序)点击右键Run Flask(app.py),或者右上角启动按钮。

2.2? 在Windows命令提示符或者PowerShell下启动项目。

在运行之前,需要cd 到项目目录下,先设置环境变量(重要),在通过命令flask run启动项目。

linux下:

$ export FLASK_APP=app.py

$ flask run

windows 命令提示符cmd下:

E:\Python\flaskProject>set FLASK_APP=app.py

flask run

PowerShell 下:

PS E:\Python\flaskProject> $env:FLASK_APP = "app.py"

E:\Python\flaskProject>set FLASK_APP=app.py

E:\Python\flaskProject>flask run
 * Serving Flask app "app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

这样就启动了一个非常简单的测试服务器。

#3、修改访问网址host和端口port

系统默认访问网址127.0.0.1,端口5000,如果需要修改,可通过下面两种方式:

3.1?在Pycharm等IDE中启动项目,修改访问网址和端口。

??

在Pycharm 2022.1版本中,打开右上角运行配置,在其他选项中加入代码

--host 127.0.0.2 --port 5050

前者表示访问网址,后者表示端口。

再启动项目,如下,访问地址变为了http://127.0.0.2:5050

FLASK_APP = app.py
FLASK_ENV = development
FLASK_DEBUG = 0
In folder E:/Python/flaskProject
D:\ProgramData\Anaconda3\envs\flaskProject\python.exe -m flask run --host 127.0.0.2 --port 5050
 * Serving Flask app 'app.py' (lazy loading)
 * Environment: development
 * Debug mode: off
 * Running on http://127.0.0.2:5050/ (Press CTRL+C to quit)

3.2? 在Windows命令提示符或者PowerShell下启动项目,修改访问网址和端口。

先设置环境变量set FLASK_APP=app.py

再启动项目flask run --host 127.0.0.2 --port 5001

此时项目访问地址变为了http://127.0.0.2:5001

E:\Python\flaskProject>set FLASK_APP=app.py

E:\Python\flaskProject>flask run --host 127.0.0.2 --port 5001
 * Serving Flask app "app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.2:5001/ (Press CTRL+C to quit)

3.3 在外网主机、云服务器、公网等环境中访问,如何设置host网址。

项目在公网环境中访问, 需要设置host=0.0.0.0,这样项目的路径ip就是当前服务主机的IP,不写的话只能通过127.0.0.1内网调用。

如下例,这是一台公网服务器,我们将host设置为0.0.0.0,启动项目,将5000端口写入服务器防火墙入栈规则(重要),这样就可以通过服务器主机IP地址进行访问了。

#4、获取URL地址和参数

4.1 URL地址作为参数传递

后端服务器通过<变量>获取URL参数,再返回给前端,如下例。

注:代码中的escape()是用来转义的,将?&、<、>、' 和 ' 转??换为 HTML 安全序列。

from flask import escape
@app.route('/user/<username>')
def show_user_profile(username):
    return 'User %s' % escape(username)

启动服务后我们输入网址http://localhost:5000/user/Mike?,网页返回"User Mike"。

4.2 加入转换器,为变量指定规则。

后端服务器通过<转化器:变量>获取URL指定规则的参数,如下例:

@app.route('/getid/<int:id>')
def show_id(id):
    return 'ID is %d' % id

启动服务后我们输入http://localhost:5000/getid/99?,网页返回ID is 99,这时这个id是型。

转化器path用于获取网址,带"/"符号,?如下例:

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    return 'Subpath %s' % escape(subpath)

启动服务后我们输入http://localhost:5000/path/static/img/python.jpg?,网页返回

"Subpath static/img/python.jpg,此时static/img/python.jpg就是一个静态网址(文件)"。

附:转换器类型?

类型描述
string(缺省值) 接受任何不包含斜杠的文本
int接受正整数
float接受正浮点数
path类似?string?,但可以包含斜杠(可用于网址)
uuid接受 UUID 字符串

4.3 获取URL提交的参数(GET请求)

要获取 URL (如??key=value&tpye=getmethod?)中提交的参数可以使用 request 对象的 args 属性,如下例,我们通过URL传递bookid和bookname两个参数,后端服务器获取参数再返回给前端。使用args.get(key,"")获取参数名,如果取不到值则返回空字符串。

from flask import request
@app.route('/book')
def show_param():
    bookid = request.args.get("bookid","")#取不到值则返回空值
    bookname = request.args.get("bookname","")
    return "书的ID={} and 书名={}".format(bookid,bookname)

启动服务后,我们输入http://localhost:5000/book?bookid=115&bookname=西游记?,网页返回"书的ID=115 and 书名=西游记"。

#5、获取Form表单数据(POST请求)?

  1. @app.route('/login', methods=['POST', 'GET'])表示login接口同时支持GET和POST请求。
  2. 通过使用 request 对象的 method 属性可以获取当前请求的方法。
  3. 获取 Form 表单数据,我们可以使用 request 对象的 form 属性,如下例:

5.1 我们在Flask项目templates目录下创建一个静态登录页面login.html。

action="/login"表示点击提交后跳转到/login接口,method=“post”表示请求方式是post请求,enctype="multipart/form-data"表示编码方式,这里我们传输的是Form数据。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>静态登录页面</title>
</head>
<body>
    <h3>登录表单</h3>
    <form action="/login" method="post" enctype="multipart/form-data">
        <input type="text" name="username" size="25px" placeholder="请输入登录名"><br>
        <input type="password" name="password" size="25px" placeholder="请输入密码"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

补充知识点1:请求方式

  1. GET请求?? ?GET请求用来查询数据,不会修改、增加数据,不会影响资源内容。
  2. POST请求?? ?POST请求一般是对服务器的数据做改变,常用于数据的提交、新增操作。
  3. PUT请求?? ?PUT请求的侧重点在于对于数据的修改操作。
  4. DELETE请求?? ?DELETE请求一般用来删除某一个资源的。

补充知识点2:编码方式:

  1. application/x-www-form-urlencoded,当请求为GET时候,浏览器用该方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串加到url后面,用?分割,加载这个新的url。如:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1
  2. multipart/form-data,当请求为POST时候,浏览器把form数据封装到http body中,然后发送到服务器,一般适用于文件传输。
  3. text/plain,以纯文本形式进行编码,其中不含任何控件或格式字符。
  4. application/json,一般用于POST请求,将json数据封装到http body中,然后发送到服务器,适用于数据交互。

5.2 我们在app.py后端服务器创建/index登录接口和/login Form信息返回接口。

render_template()方法可以渲染并跳转到模板网页,如下例,Flask会在templates目录下寻找login.html模板,然后跳转到该静态网页。

我们在login.html的 Form 表单中输入账号密码后,点击提交,网页跳转到/login接口,该接口通过request.form.get("key")获取表单数据并返回到网页中。

from flask import render_template,request
@app.route('/index')
def index_function():
    #返回 login.html静态网页
    return render_template("login.html")

@app.route('/login',methods=["POST"])
def login_function():
    if request.method=="POST":
        username = request.form.get("username")
        password = request.form.get("password")
        return "登录名是:%s,密码是:%s"%(username,password)

5.3 执行效果

启动服务后,我们输入http://localhost:5000/index?,网页跳转到登录页面login.html,我们再输入登录账号密码。

点击提交后,系统跳转到/login接口,并在前台网页中返回账号和密码信息。

??

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:19:02  更:2022-07-17 16:23:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:38:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码