Flask框架路由和视图用法实例分析
本文实例讲述了Flask框架路由和视图用法。分享给大家供大家参考,具体如下:
创建一个简单flask框架程序
#1.导入Flask类
fromflaskimportFlask
#2.创建Flask对象接收一个参数__name__,它会指向程序所在的包
app=Flask(__name__)
#3.装饰器的作用是将路由映射到视图函数index
@app.route('/')
defindex():
return'HelloWorld'
#4.Flask应用程序实例的run方法,启动WEB服务器
if__name__=='__main__':
app.run()
1.Flask对象参数:
2.run方法参数:
debug 默认为False,更改为True可以不重启服务器进行服务器修改(ctrl+s保存即可), 并且报错后会有相应提示
路由视图函数
@app.route("/路径"):路由装饰器,可以通过路径执行被装饰的函数
app.url_map:可查看当前路由函数和路径
1.动态参数:@app.route("/路径/<类型:变量>")
常用类型
自定义类型:
(1)编写⾃定义转换器类,继承BaseConverter
(2)编写init⽅法
(3)初始化⽗类,⼦类变量
(4)将⾃定义转换器添加到默认转换器列表中
例:
fromflaskimportFlask
fromwerkzeug.routingimportBaseConverter
#1.自定义类,继承自BaseConverter
classMyRegexConverter(BaseConverter):
#2.编写方法,init
def__init__(self,map,regex):
#3.初始化,父类,子类变量
super(MyRegexConverter,self).__init__(map)
self.regex=regex
app=Flask(__name__)
#4.将自定义转换器添加到,系统默认的转换列表中
app.url_map.converters["re"]=MyRegexConverter
print(app.url_map.converters)
#接收三位整数
#通过re调用的init方法,参数1[默认]:app.url_map,参数2:自己定义的规则
@app.route('/')
defhello_world(number):
return"therenumberis%s"%number
#接收四位整数
@app.route('/')
defget_four_number(number):
return"thefournumberis%s"%number
#接收手机号
@app.route('/')
defget_mobile_number(mobile):
return"themobilenumberis%s"%mobile
if__name__=='__main__':
app.run()
2.指定请求方式:
@app.route("/路径",methods=["⽅式1","方式2"])
方式:GET(默认),POST,PUT,DELETE
3.视图函数返回内容:
(1)直接返回响应体对象:
返回响应体、状态码、响应头
return"hello","666",{"name":"zhangsan"}
(2)手动创建响应体对象:
response=make_response("响应体")
response.status="状态码状态码描述"
response.headers={响应头键值对}
(response.headers["Content-Type"]="application/json")
returnresponse
(3)返回json:
jsonify(dict) jsonify(key=value,key2=value2)
(4)重定向:
重定向:redirect("路径")
反解析:url_for("函数",key=value)
二者配合使⽤可以传递参数
例:
"""
url_for,反解析,根据视图函数名称找到,视图函数的路径地址,可以携带参数
格式:url_for('函数名',key=value),返回的是一个地址(字符串)
"""""
fromflaskimportFlask,url_for,redirect
app=Flask(__name__)
#京东,代号111
@app.route('/jingdong')
defjingdong():
#print(url_for("taobao"))#/taobao
#print(url_for("taobao",token=111))#/taobao/111
response=redirect(url_for("taobao",token=111))
returnresponse
#易迅,代号222
@app.route('/yixun')
defyixun():
response=redirect(url_for("taobao",token=222))
returnresponse
@app.route('/other')
defother():
response=redirect(url_for("taobao",token=888))
returnresponse
#淘宝
@app.route('/taobao/')
deftaobao(token):
#判断哪个平台过来的用户
if(token==111):
return"欢迎京东用户,光临淘宝,给你打9折"
elif(token==222):
return"欢迎易迅用户,光临淘宝,给你打5折"
else:
return"其他用户"
if__name__=='__main__':
app.run()
4.异常处理:
(1)抛出异常(abort):
abort(code)
code为HTTP错误状态码
(2)异常捕获(errorhandler):
code为HTTP错误状态码 @app.errorhandler(code) deffun(): …
参数加载方式
1.从类中加载:app.config.from_object()
例:
classConfig(object): #调试模式 DEBUG=True app.config.from_object(Config)
2.从配置⽂件中加载:app.config.from_pyfile()
例:
app.config.from_pyfile("config.ini")
3.从环境变量加载(了解):
app.config.from_envvar()
希望本文所述对大家基于flask框架的Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。