首先,作为一个 Web 的框架,主要就是当作网页的 Server 在运作的,网页中必不可少的就是网址了对吧,那麽 Flask 至少要可以针对请求的网址进行回传资料吧!
在实际开始做之前,先简单说一下 POSTMAN 这个东西,POSTMAN 主要是让你可以更自由的选择要怎麽送出 url 的一个工具。
基本上到 POSTMAN官网下载页面 下载安装(就下一步到底,然後就安装完了),然後申请一个帐号(要啥填啥就对了,也可以使用 google 帐号)登入就可以使用了,打开後会看到类似这样的画面,红色区域(中上)是输入 url 跟 method 的区域;绿色区域(右上)是送出;蓝色区域(中间)是输入要携带的参数;橘色区域(下方)是显示回传结果的地方。如果一个不够,红色区域的上方还有加号可以增加分页,让你可以一次可以使用更多种不同的东西。
那要回复请求要怎麽写呢?
@app.route('<url>', methods=['<method>'])
def <function name>():
# TODO
回复请求的方式大概是这样,function 前面加个 Day 08 讲到的装饰器。url 就填网址,methods (可写可不写,里面的 method 要大写,要有 s
,当初为了这个 s
找了一下午的bug)就是送的方式,function name 就自己取个有意义的名字,function 里面就写这个 function 要干嘛。
顺便再说一下,url 可以使用 [A-Z, a-z, 0-9, -] 这几个字符组成。那麽工具齐全了,就实际来做几个试试吧!
app.py
from flask import Flask
app = Flask(__name__)
# 首页,不限 methods
@app.route('/')
def index():
return 'Hello World'
# POST methods(POST 大写,要有s跟中括号)
@app.route('/posttest', methods=['POST'])
def posttest():
return 'post test success'
if __name__ == '__main__':
app.run()
接着执行
# 使用虚拟环境的输入
$ pipenv run python app.py
# 不使用虚拟环境的输入
$ python app.py
然後打开安装好了的 POSTMAN,选好 POST 以及输入 url: http://127.0.0.1:5000/posttest
,接着送出就会看到
在这边也可以试试,如果换成 GET 会发生什麽事?
回传了一个看起来很复杂的东西对吧,把回传区块的 Pretty 改成选择 Preview 看看。
是不是很清楚的写着不合的 method 啦,基础大概就这样。
/
or not to /
如果上各种网站时,你有注意到网址的结尾有些有 /
;有些没有 /
,看其他人的网站时,有没有 /
都不会影响你浏览。不过自己在写就不一样了,那 url 结尾有没有 /
到底差在哪呢?
@app.route('/A/')
def a_page():
return 'A page'
@app.route('/B')
def b_page():
return 'B page'
简单说有 /
就像资料夹。如果输入的是没有 /
的 url,网站没有无 /
的 url 的话,就会重新导向有 /
的 url。就相当於没有找到档案就打开同名的资料夹里面的默认档案。
而没有 /
就像档案。如果输入的是有 /
的 url,网站没有有 /
的 url 的话,就会 404 Not Found,不会帮你重新导向。
这两种方式都可以使用,一开始只需要知道 /A/
跟 /A
是两个不同的网页就行了(如果真的要说的话会扯到SEO,那又可以开另外一个系列了)。
如果现在要回传一个网址给使用者,而这个网址又很长,那当然不可能使用ctrl + c
与 ctrl + v
大法对吧。所以就需要使用到 url_for() 这个功能,那要如何使用呢?
url_for('<function name>')
function name 就填那个路由的 function 名称,在使用之前记得 import url_for(from flask import url_for
)。实作一个会更清楚:
@app.route('/')
def index():
return '<a href="{}">login</a>'.format(url_for('login'))
@app.route('/login/')
def login():
return 'login page'
这样的好处就是可以不用在意 login 的 url,即使之後改掉 url,只要 function 名称还是 login 就还是可以对到正确的位置。
如果现在需要将使用者导向到另一个页面,可以怎麽做呢?
redirect('<url>')
# or
redirect(url_for('<function name>'))
这样就可以直接将使用者到到另一个网址了,在使用之前一样要 import redirect(from flask import redirects
)。大概就像这样:
@app.route('/')
def index():
return '<a href="{}">login</a>'.format(url_for('login'))
@app.route('/login/')
def login():
# Authenticate user
if auth_result == 'success':
return redirect(url_for('home'))
else:
return redirect(url_for('index'))
@app.route('/home/')
def home():
return 'home page'
大概就像这样,处里完就会将使用者导向另一个页面,不需要让使用者自己手动跳转,提高使用者体验。
那麽就大概这样,处理好路由,网站的形状就出来了,接着就可以处力其他东西了。
大家掰~掰~
<<: # Day13--你到底爱不爱我?我们来解包这个Optional
>>: Turbo Pascal 语言和你 SAY HELLO!!
免接触 免拿笔签名 流程 人进场 --> 手机扫描 QR --> 填写资料 -->...
善用套件,提升效率 VS Code 有许多套件用,这里个人推荐几款能提升效率的套件。 Auto Re...
聊完了区网中设备与设备的连结後,我们来近距离看看这三大设备:AP, Switch 和 Router ...
Introduction As a python coder, you want to find a...
前言 Pandas 是强大的资料科学分析工具,结合前几天所学的NumPy特性 提供方便读取及使用的资...