我们在创建好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'
我们可以在app.py(根程序)点击右键Run Flask(app.py),或者右上角启动按钮。
在运行之前,需要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)
这样就启动了一个非常简单的测试服务器。
系统默认访问网址127.0.0.1,端口5000,如果需要修改,可通过下面两种方式:
在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)
先设置环境变量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)
项目在公网环境中访问, 需要设置host=0.0.0.0,这样项目的路径ip就是当前服务主机的IP,不写的话只能通过127.0.0.1内网调用。
如下例,这是一台公网服务器,我们将host设置为0.0.0.0,启动项目,将5000端口写入服务器防火墙入栈规则(重要),这样就可以通过服务器主机IP地址进行访问了。
后端服务器通过<变量>获取URL参数,再返回给前端,如下例。
注:代码中的escape()是用来转义的,将 &、<、>、' 和 ' 转换为 HTML 安全序列。
from flask import escape
@app.route('/user/')
def show_user_profile(username):
return 'User %s' % escape(username)
启动服务后我们输入网址http://localhost:5000/user/Mike ,网页返回"User Mike"。
后端服务器通过<转化器:变量>获取URL指定规则的参数,如下例:
@app.route('/getid/')
def show_id(id):
return 'ID is %d' % id
启动服务后我们输入http://localhost:5000/getid/99 ,网页返回ID is 99,这时这个id是型。
转化器path用于获取网址,带"/"符号, 如下例:
@app.route('/path/')
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 字符串 |
要获取 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 书名=西游记"。
action="/login"表示点击提交后跳转到/login接口,method=“post”表示请求方式是post请求,enctype="multipart/form-data"表示编码方式,这里我们传输的是Form数据。
静态登录页面
登录表单
补充知识点1:请求方式
补充知识点2:编码方式:
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)
启动服务后,我们输入http://localhost:5000/index ,网页跳转到登录页面login.html,我们再输入登录账号密码。
点击提交后,系统跳转到/login接口,并在前台网页中返回账号和密码信息。