python web框架Flask学习笔记(二)Flask的路由

python web框架Flask学习笔记(二)Flask的路由

redballoon
2022-10-29 / 0 评论 / 15 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年02月20日,已超过36天没有更新,若内容或图片失效,请留言反馈。

简介

5d390c8ddf1b5881.jpg

认识Flask的项目结构

----static
--------css
--------js
--------images
    ...

----templates
--------index.html
--------page.html
--------category.html
    ...

----app.py
static文件夹里存放的都是些静态文件如:css,js,图片,视频,音频等。
templates就是存放些html文件咯。

app.py可以看作处理路由以及配置的文件。
配置上:

app = Flask(
    __name__,
    template_folder='xxx',
    static_folder='xxx',
    static_url_path='/xxx'
)

1.template_folder : 指定存放模板的文件夹的名称(默认为templates)
2.static_folder : 指定存放静态文件资源的文件夹的名称(默认为static)

注意:如果没有指定static_url_path的话,则访问路径和static_folder 的名称是一致的

3.static_url_path : 指定静态文件的访问路径

我们入门学习的话就先让它保持默认就好

路由是什么

客户端(例如 Web 浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask 程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。

在Flask中,路由是通过 @app.route 装饰器来表示的

路由的使用

  1. 一个参数的路由
from flask import Flask

app = Flask(__name__)


# 1.基本带参路由
# <name> 后续要在地址栏传递的参数,(一个参数的路由)
@app.route('/show/<name>')
def show1(name):
    # 函数中,name表示的就是手动在地址栏上传递过来的数据 (接收)
    return "<h1>Hello ~ {}</h1>".format(name)


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

Snipaste_2022-10-29_17-44-51.png

  1. 多个参数的路由
from flask import Flask

app = Flask(__name__)


# 2.带多个参数的路由  连个参数的路由
# 在<>中的参数必须跟传递的相同
@app.route('/manyShow/<title>/<page>')
def many_show(title, page):
    return "<h1>这是关于{}的内容,第{}页</h1>".format(title, page)


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

Snipaste_2022-10-29_17-43-26.png

  1. 指定路由参数的类型
from flask import Flask

app = Flask(__name__)    
 
# 3.指定参数类型的路由  <int: page>: 表示page参数是一个整形的数值而非默认的字符
@app.route('/article/<title>/<float:page>')
def many_show(title, page):
    return "<h1>你用的{}的版本号是{}</h1>".format(title, page)

    # *以占位符的方式来接收参数,如果什么都不做只能是字符串类型
    # page 此时为float类型,而并非字符串
    
    # Flask 中所支持的类型转换器
    # 缺省(默认不写的)     字符串型, 不允许有 /
    # int:                整形
    # float:              浮点型
    # path:               字符串型, 但允许有 /


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

Snipaste_2022-10-29_17-50-27.png

  1. 多路由的使用
from flask import Flask

app = Flask(__name__)

# 允许在一个视图处理函数中设置多个url路由规则
@app.route('/')
@app.route('/index')
def index():
    # 就是 / 和 /index路径都展示同一页面 --> 首页
    return '<h1>这是首页</h1>'


if __name__ == '__main__':
    app.run(debug=True)

路由中设置HTTP请求方法

Flask路由设置规则也允许设置对应的请求方法,只有将匹配上请求方法的路径交给视图处理函数取执行

通过methods=['请求类型'] 来设置,最常用POST和GET

@app.route('/post', methods=['POST'])
def post():
    return 'xxx'
# * 只有post请求方式允许访问 localhost:5000/post

运行结果:

Snipaste_2022-10-29_18-38-13.png

可以在浏览器开发工具中的network中看到,Request Method 为 GET -- 405 ,是因为页面默认是GET请求,而POST请求是由表单产生的

解决:

@app.route('/post', methods=['POST', 'GET'])
def post():
    return '假装是POST请求'

后面学习到会更详细,这里简单看看就好

url的解析

  • 正向解析:程序自动解析,根据@app.route()中设置的访问路径来匹配处理函数
  • 反向解析:通过视图处理函数的名称自动生成视图处理函数的访问路径

Flask中提供了 url_for() 函数,用于反向解析url

from flask import Flask, url_for

app = Flask(__name__)


@app.route('/language/<name>/<version>')
def url(name, version):
    return '<h1>您当前使用的编程语言是{},版本是{}.</h1>'.format(name, version)


@app.route('/url')
def page_url():
    # 链接地址 /python 像爬虫中经常需要拼接的链接部分 这即是反向解析的url地址
    link = url_for('url', name='python', age='3.8')
    resp = '<a href="'+link+'">反向解析后的地址:' + link+' </a>'
    return resp


if __name__ == '__main__':
    app.run(debug=True)

运行结果:

Snipaste_2022-10-29_19-25-02.png

  • 特殊: url_for('static', filename='style.css')
  • filename 静态文件反向解析
0

评论 (0)

取消