在前后台交互时,前端需要设置name属性,后端通过name属性去获取数据,然后逻辑处理,例如:<input name='get_action>'
1.通过<id>可动态接收参数
可指定请求参数类型:string:(不能包含/),path:可以包含/,int,float,uuid
通过uuid可生产唯一识别码
import uuid
from flask import Flask
print(uuid.uuid4()) # 6378d59d-c502-4976-a140-05c6c61c807d
app = Flask(__name__)
@app.route('/login/<int:id>') # 通过<id>可动态接收参数,可指定请求参数类型:string:(不能包含/),path:可以包含/,int,float,uuid
#
def index(id):
return id
if __name__ == '__main__':
app.run(debug=True)
2.通过request.arges接收参数。
3.在flask中,url:/login/和/login是不一样的
路由:路由就是url和视图函数的绑定关系。
路由注册机制:
1.装饰器注册:底层也是对add_url_rule进行封装的。
app.route('/login',methods=['post','get')]
app.route中可通过methods参数指定此路由可接收的请求方法,也可以限制请求方法。
from flask import Flask
app = Flask(__name__)
@app.route('/login',methods = ['post','get']) # 可通过methods参数指定此路由可接收的请求方法,也可以限制请求方法。 #
def index():
return 'login'
def home():
return 'home'
# 集中注册
app.add_url_rule('/home',view_func=home) # 当项目很大,url较多,就推荐这种集中注册机制,若是下项目,就用app.route()装饰器注册
print(app.url_map)
if __name__ == '__main__':
app.run(debug=True)
# 输出:
# Map([ < Rule'/login'(GET, HEAD, OPTIONS) -> index >,< Rule'/home'(GET, HEAD, OPTIONS) -> home >,< Rule'/static/<filename>'(GET, HEAD, OPTIONS) -> static >])
2.集中注册机制:当url较多时,可用专用rul.py模块来集中注册管理url
app.add_url_rule('/login',view_func=func,methods=['post'])
add_url_rule可以将参数中的路由信息注册到app核心对象中。
app.url_map:
flask中触发add_url_rule后会讲路由信息加入一个类似字典的url_map对象中。
from flask import Flask
app = Flask(__name__)
@app.route('/login') # 通过<id>可动态接收参数,可指定请求参数类型:string:(不能包含/),path:可以包含/,int,float,uuid #
def index():
return 'login'
def home():
return 'home'
# 集中注册
app.add_url_rule('/home',view_func=home) # 当项目很大,url较多,就推荐这种集中注册机制,若是下项目,就用app.route()装饰器注册
print(app.url_map)
if __name__ == '__main__':
app.run(debug=True)
# 输出:
# Map([ < Rule'/login'(GET, HEAD, OPTIONS) -> index >,< Rule'/home'(GET, HEAD, OPTIONS) -> home >,< Rule'/static/<filename>'(GET, HEAD, OPTIONS) -> static >])
3.重定向:
3.1 app.route(redirect_to='/'):不会执行app.route下面的视图函数
3.2 视图函数中return redirect('/'):会执行视图函数。
from flask import Flask
from werkzeug.utils import redirect
app = Flask(__name__)
@app.route('/login', methods=['post', 'get'], redirect_to='/house')
def index():
return 'login'
@app.route('/house', methods=['post', 'get'])
def house():
return 'house'
@app.route('/home', methods=['GET'], endpoint='new')
def home():
print('触发了home')
return redirect('/house')
if __name__ == '__main__':
app.run(debug=True)
4.默认参数设置:
4.1 defaults={'id':5}
4.2 视图函数中定义默认值
from flask import Flask
app = Flask(__name__)
@app.route('/login', methods=['post', 'get'])
def index(id=9): # 视图函数中定义默认参数
return f'{id}'
if __name__ == '__main__':
app.run(debug=True)
# 输出:
# Map([ < Rule'/login'(GET, HEAD, OPTIONS) -> index >,< Rule'/home'(GET, HEAD, OPTIONS) -> home >,< Rule'/static/<filename>'(GET, HEAD, OPTIONS) -> static >])
5.视图函数的分离
python中解决两个模块相互导入造成的循环导入问题“:
1. 在需要的地方再导入,不用在文件一开始就导入
2.导入模块中的代码,不要只导入模块。