简介
认识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 装饰器来表示的
路由的使用
- 一个参数的路由
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)
运行结果:
- 多个参数的路由
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)
运行结果:
- 指定路由参数的类型
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)
运行结果:
- 多路由的使用
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
运行结果:
可以在浏览器开发工具中的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)
运行结果:
- 特殊: url_for('static', filename='style.css')
- filename 静态文件反向解析
评论 (0)