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)
登录模块:
1 2 3 4 5 6 7 8 | 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) |
上传
1 2 3 4 5 6 7 8 9 | @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--,浏览更多精彩文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫