Flask学习笔记(3)--路由
0x01 参数传递
传递参数的语法是: /<参数名>/,然后在视图函数中,也要定义同名的参数。
参数的数据类型:
1、如果没有指定具体的数据类型,那么默认就是使用string 数据类型。
2、int 数据类型只能传递int类型。
3、float 数据类型只能传递float类型。
4、path 数据类型和string 有点类型,都可以接收任意的字符串,但是path可以接收路径,也就是说可以包含斜杠。
5、uuid 数据类型只能接收符合uuid的字符串。uuid是一个全宇宙都唯一的字符串,一般可以用来作为表的主键。
6、any 数据类型可以在一个url中指定多个路径。
接收用户传递的参数:
1、第一种:使用path的形式(将参数嵌入到路径中)
2、第二种:使用查询字符串的方式,就是通过 ?key=value的形式传递的。
3、如果出于SEO优化的考虑,推荐第一种。
# _*_ coding:utf-8 _*_ from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/list/') def article_list(): return 'article list' @app.route('/p/<id>/') def article_detail1(id): return u'您请求的文章是:%s' % id @app.route('/page/<int:article_id>/') def article_detail2(article_id): return u'您请求的文章是:%s' % article_id @app.route('/article/<path:test>/') def test_article(test): return 'test article: %s' % test @app.route('/u/<uuid:user_id>') def user_detail(user_id): return u'个人用户信息: %s' % user_id import uuid print uuid.uuid4() #/blog/<id>/ #/user/<id>/ @app.route('/<any(blog,user):url_path>/<id>/') def detail(url_path,id): if url_path == 'blog': return u'博客详情:%s' % id else: return u'用户信息:%s ' %id from flask import request @app.route('/d/') def d(): wd = request.args.get('wd') ie = request.args.get('ie') return ie #通过字符串的方式传递参数 #/d/?wd=python if __name__ == '__main__': app.run()
正则路由转换器
from flask import Flask,render_template from werkzeug.routing import BaseConverter class RegexConverter(BaseConverter): def __init__(self,url_map,*items): super(RegexConverter,self).__init__(url_map) self.regex=items[0] app = Flask(__name__) app.url_map.converters['regex']=RegexConverter @app.route('/user/<regex("[a-z]{3}"):user_id>') def user(user_id): return 'User %s' % user_id if __name__ == '__main__': app.run(debug=True)
登录模块:
from flask import Flask,render_template,request app = Flask(__name__) @app.route('/login',methods=['GET','POST']) def login(): return render_template('login.html',method=request.method) if __name__ == '__main__': app.run(debug=True)
上传
@app.route('/upload',methods=['GET','POST']) def upload(): if request.method=='POST': f=request.files['file'] basepath = path.abspath(path.dirname(__file__)) upload_path=path.join(basepath,'static\\uploads') f.save(upload_path,secure_filename(f.filename)) return redirect(url_for('upload')) return render_template('upload.html')
windows平台上,flask上传文件出现IOError: [Errno 13] Permission denied: 'D:\\test\\myproject\\static\\uploads'
解决方法:
第一种:
@app.route('/upload',methods=['GET','POST']) def upload(): if request.method=='POST': f = request.files['file'] basepath = path.abspath(path.dirname(__file__)) filename = secure_filename(f.filename) upload_path=path.join(basepath,'static','uploads',filename) f.save(upload_path) return redirect(url_for('upload')) return render_template('upload.html')
第二种
@app.route('/upload',methods=['GET','POST']) def upload(): if request.method=='POST': f = request.files['file'] filename = secure_filename(f.filename) f.save(path.join('static/uploads',filename)) return redirect(url_for('upload')) return render_template('upload.html')
404 状态
@app.errorhandler(404) def page_not_found(error): return render_template('404.html'),404
本文由Bypass整理发布,转载请保留出处。
欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。