没有合适的资源?快使用搜索试试~ 我知道了~
Python全栈(七)Flask框架之2.Flask视图和模板
0 下载量 149 浏览量
2020-12-21
13:44:08
上传
评论
收藏 797KB PDF 举报
温馨提示
试读
12页
文章目录一、url_for构造URL和指定地址末尾的/1.通过url_for构造URL2.指定URL末尾的斜杠二、指定HTTP方法三、页面跳转和重定向四、函数的返回值 – 响应(Response)五、flask模板简介六、flask模板传参 一、url_for构造URL和指定地址末尾的/ 1.通过url_for构造URL 一般我们通过一个URL就可以映射到某一个函数。反过来,知道一个函数时,也可以获得对应的URL,url_for()函数可以进行反转、实现这个功能。 url_for()函数接收一个及以上的参数,第一个参数是函数名,接收对应URL规则的命名参数,如果函数中有参数,则将这些参数传入u
资源推荐
资源详情
资源评论
Python全栈(七)全栈(七)Flask框架之框架之2.Flask视图和模板视图和模板
文章目录文章目录一、url_for构造URL和指定地址末尾的/1.通过url_for构造URL2.指定URL末尾的斜杠二、指定HTTP方法三、页面跳转和重定向四、函数的返回值 – 响应(Response)五、
flask模板简介六、flask模板传参
一、一、url_for构造构造URL和指定地址末尾的和指定地址末尾的/
1.通过通过url_for构造构造URL
一般我们通过一个URL就可以映射到某一个函数。反过来,知道一个函数时,也可以获得对应的URL,url_for()函数可以进行反转、实现这个功能。
url_for()函数接收一个及以上的参数,第一个参数是函数名,接收对应URL规则的命名参数,如果函数中有参数,则将这些参数传入url_for()函数第一个参数的后面。
进行测试:
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/')
def index():
# 根据函数的名字进行反转,得到函数对应的路由
print(url_for('article_list',aid=2))
return 'Hello World'
@app.route('/article/')
def article_list(aid):
return 'article %s' % aid
if __name__ == '__main__':
app.run(debug=True)
运行开启服务后访问http://127.0.0.1:5000/,打印
127.0.0.1 - - [09/Apr/2020 16:46:24] "GET /article/3 HTTP/1.1" 200 -
127.0.0.1 - - [09/Apr/2020 16:46:30] "GET / HTTP/1.1" 200 -
/article/2
显然,此时通过url_for()方法得到了一个函数对应的路由,并显示在日志中;
有参数时,调用url_for()方法也要传入参数。
通过url_for()函数来构建URL从而在代码中拼URL的好处有两点:
将来如果修改了URL,但没有修改该URL对应的函数名,就可以直接通过url_for()函数来获取地址而不用手动替换所有对应的URL。
url_for()函数可以转义一些特殊字符和unicode字符串,这在有时候显得很有用。
进一步测试:
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/')
def index():
print(url_for('article_list',aid=2))
print(url_for('notice'))
print(url_for('follow', fid=2,page=5))
return 'Hello World'
@app.route('/article/')
def article_list(aid):
return 'article %s' % aid
@app.route('/notice')
def notice():
return 'Notice is as follows'
@app.route('/follows/')
def follow(fid):
return 'Follower %s' % fid
if __name__ == '__main__':
app.run(debug=True)
再次访问,打印:
/article/2
/notice
/follows/2?page=5
显然,如果url_for()方法中提供的参数多于传入的函数的参数时,以查询参数的形式返回路由。
斜杠斜杠/ 转码测试:
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/')
def index():
print(url_for('follow', fid=2,page=5,param='/'))
return 'Hello World'
@app.route('/article/')
def article_list(aid):
return 'article %s' % aid
@app.route('/notice')
def notice():
return 'Notice is as follows'
@app.route('/follows/')
def follow(fid):
return 'Follower %s' % fid
if __name__ == '__main__':
app.run(debug=True)
打印:
127.0.0.1 - - [09/Apr/2020 17:07:09] "GET / HTTP/1.1" 200 -
/follows/2?page=5¶m=%2F
显然,此时 / 被编码成ASCII码 %2F。
2.指定指定URL末尾的斜杠末尾的斜杠
有些URL的末尾是有斜杠的,有些URL末尾是没有斜杠的,这其实是两个不同的URL。
例如定义路由@app.route('/article/'),当访问一个结尾不带斜线的URL/article,会被重定向到带斜线的URL/article/上去。
但是在定义路由的时候,如果在末尾没有加上斜杠,在访问的时候又加上了斜杠,这时候就会抛出一个404错误页面。例如@app.route("/article")没有在末尾加斜杠,此时只能访问
到/article在访问/article/的时候,就会抛出一个404错误。
因此建议在定义路由时加上末尾的在定义路由时加上末尾的/,这与在访问时加 / 与否都可以访问到。
二、指定二、指定HTTP方法方法
默认情况下定义的路由只能使用GET请求,可以在@app.route()中可以传入一个关键字参数methods来指定本方法支持的HTTP方法。
如果想用post请求,可以示意Postman工具来模拟,可点击https://download.csdn.net/download/CUFEECR/12319280进行下载,点击安装包进行安装,安装完成后直接打开运行,即
可进行各种方法的网络请求。
先进行测试:
from flask import Flask,url_for,request
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
@app.route('/article/')
def article_list(aid):
return 'article %s' % aid
@app.route('/login/')
def login():
return 'login'
if __name__ == '__main__':
app.run(debug=True)
服务运行之后,在Postman中进行测试,如下:
显然,此时Post方法不被允许,在路由中添加方法,再测试:
from flask import Flask,url_for,request
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
@app.route('/article/')
def article_list(aid):
return 'article %s' % aid
@app.route('/login/', methods=['GET','POST'])
def login():
return 'login'
if __name__ == '__main__':
app.run(debug=True)
再在Postman中测试:
显然,装饰器将让login的URL既能支持GET方法又能支持POST方法,此时可以用POST方法请求到。
在给定了methods参数后,就只能用方法列表中的方法请求,如果列表中没有get方法则不能再用get方法进行请求。
还可以传入参数,在flask项目中接收参数。
测试如下:
from flask import Flask,url_for,request
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
@app.route('/article/')
def article_list(aid):
return 'article %s' % aid
@app.route('/login/',methods=['GET','POST'])
def login():
print(request.form.get('name'))
return 'login'
if __name__ == '__main__':
app.run(debug=True)
Postman中请求:
查看控制台,会看到:
127.0.0.1 - - [09/Apr/2020 19:00:14] "POST /login/ HTTP/1.1" 200 -
corley
得到了请求的方法和得到的数据。
接收参数的方法:
get请求接收参数
request.args.get('xxx')
post请求接收参数
request.form.get('xxx')
三、页面跳转和重定向三、页面跳转和重定向
重定向在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面。
比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,此时应该重定向到登录页面。
重定向分为:
永久性重定向
http的状态码是301,多用于旧网址被废弃了要转到一个新的网址确保用户的访问,一个典型的例子是京东网站,你输入www.jingdong.com的时候,会被重定向到www.jd.com,因
剩余11页未读,继续阅读
资源评论
weixin_38695471
- 粉丝: 3
- 资源: 911
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功