【Flask】路由-视图补充

网友投稿 908 2022-11-24

【Flask】路由-视图补充

【Flask】路由-视图补充

路由设置的两种方式

#第一种@app.route('/xxx') def index(): return "index"

#第二种def index(): return "index" app.add_url_rule("/xxx",None,index) #第一个参数为路径,第二个参数为endpoint为None,第三个为index函数名

​​app.route()​​当中可以包含的参数

rule, URL规则view_func, 视图函数名称endpoint=None, 名称,用于反向生成URL,即: url_for('名称')methods=None, 允许的请求方式,如:["GET","POST"]strict_slashes=None, 对URL最后的 / 符号是否严格要求,即访问网址后多了/是否可以正常访问redirect_to=None, 重定向到指定地址,对于新老网站的交替访问非常有用,当访问老网站的时候会自动跳转到新的网址defaults=None, 默认值,当URL中无参数,函数需要参数时,使用defaults={'k':'v'}为函数提供参数subdomain=None, 子域名访问

(1)参数defaults用法

@app.route('/xxx',defaults={'v':123}) def index(v): return "index"

(2)参数redirect_to用法

@app.route('/xxx', redirect_to="/new")def index(v): return "index"

(3)参数subdomain用法

from flask import Flask, views, url_forapp = Flask(import_name=__name__)app.config['SERVER_NAME'] = 'wupeiqi.com:5000' #需要手动设置本地host文件,加入以下对应关系"""127.0.0.1 wupeiqi.com127.0.0.1 web.wupeiqi.com127.0.0.1 admin.wupeiqi.com"""# subdomain="admin")def admin_index(): return "admin.your-domain.tld"# subdomain="web")def web_index(): return "web.your-domain.tld"# subdomain="")def username_index(username): """Dynamic subdomains are also supported Try going to user1.your-domain.tld/dynamic""" return username + ".your-domain.tld"if __name__ == '__main__': app.run()

CBV模式实现,一般在flask中视图用FBV

import functoolsfrom flask import Flask,viewsapp = Flask(__name__)def wrapper(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return innerclass UserView(views.MethodView): methods = ['GET'] decorators = [wrapper,] def get(self,*args,**kwargs): return 'GET' def post(self,*args,**kwargs): return 'POST' def b(self): return 11app.add_url_rule('/user',None,UserView.as_view('uuuu')) #学了django的cbv模式才能理解,第三个参数里的参数'uuuu'相当于endpoint,这里没有定义响应函数uuuuif __name__ == '__main__': app.run()

自定义正则

from flask import Flask,url_forapp = Flask(__name__)# 步骤一:定制类from werkzeug.routing import BaseConverterclass RegexConverter(BaseConverter): """ 自定义URL匹配正则表达式 """ def __init__(self, map, regex): super(RegexConverter, self).__init__(map) self.regex = regex def to_python(self, value): """ 路由匹配时,匹配成功后传递给视图函数中参数的值 :param value: :return: """ return int(value) def to_url(self, value): """ 使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数 :param value: :return: """ val = super(RegexConverter, self).to_url(value) return val# 步骤二:添加到转换器app.url_map.converters['reg'] = RegexConverter"""1. 用户发送请求2. flask内部进行正则匹配3. 调用to_python(正则匹配的结果)方法4. to_python方法的返回值会交给视图函数的参数"""# 步骤三:使用自定义正则@app.route('/index/') #在reg()中编写正则表达式def index(nid): print(nid,type(nid)) print(url_for('index',nid=987)) #调用to_url方法 return "index"if __name__ == '__main__': app.run()

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Flask】模板渲染
下一篇:Component
相关文章

 发表评论

暂时没有评论,来抢沙发吧~