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- _*_
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[] 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()
def page_not_found(error):
return render_template('404.html'),
Flask学习笔记(3)--路由的更多相关文章
- Python Flask学习笔记之Hello World
Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...
- Python Flask学习笔记之模板
Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...
- vue2.0学习笔记之路由(二)路由嵌套+动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2.0学习笔记之路由(二)路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue学习笔记(十)路由
前言 在上一篇博客vue学习笔记(九)vue-cli中的组件通信内容中,我们学习组件通信的相关内容和进行了一些组件通信的小练习,相信大家已经掌握了vue-cli中的组件通信,而本篇博客将会带你更上一层 ...
- 【Flask】Flask学习笔记(一) 应用基本结构
初始化 使用前必须创建一个应用实例 from flask import Flask app = Flask(__name__) 路由和视图函数 请求流程 客户端(web浏览器)--> web服 ...
- Tornado学习笔记(二) 路由/post/get传参
本章我们学习 Tornado 的路由传参等问题 路由 路由的匹配 Tornado的路由匹配采用的是正则匹配 一般情况下不需要多复杂的正则,正则的基本规则如下(站长之家) 举个例子 (r'/sum/(\ ...
- Flask学习笔记03之路由
1. endpoint from flask import Flask, url_for # 实例化一个Flask对象 app = Flask(__name__) # 打印默认配置信息 # 引入开发环 ...
- Flask 学习笔记
Flask 是一个Web应用框架,我也就是一边看书,一边写博文做记录 这本书: 首先安装Flask ,和配置环境,参考这边博客: 然后就开始学习Flask 了. 1.Application and R ...
随机推荐
- 我要当皇帝等微信小游戏的wbs
猜字:1.视图交互: 1)主界面:展示每一道题目跟答案 1) 题目展示区域, 成员布局 2) 选项展示 3) 其他 2)下一道题弹框 3)答案弹框 4)结果弹框 5)关卡弹框 2.数据处理, 1) 读 ...
- Java基础知识--内存管理
Java语言中 的垃圾收集器相对于以前的其他语言优势是什么? 过去的语言需要程序员显示的进行分配内存.释放内存.这种做法可能会引起“内存泄漏”,即由于某种原因是分配给程序的内存无法释放,如果该任务不断 ...
- csrf 跨站请求伪造相关以及django的中间件
django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware来完成. 1.django中常用的中间件? - proces ...
- Linux配置防火墙,开启80端口、3306端口
Linux配置防火墙,开启80端口.3306端口 起因是因为想使用Navicat连接一下数据库,发现连接不上 通过查阅许多资料和多次测试发现是因为防火墙没有配置3306端口 话不多说,开整,同理, ...
- Arcmap内容列表刷新
Arcmap内容列表刷新ILayer pLayer = pFDOGLayer as ILayer; if (!pLayer.Visible) ...
- python3 cookie
最近再次学习python,本来就是一个菜鸟,我按照 Python CGI编程 发现读cookie 读取不了,后来发现它这种写的方式也不怎么靠谱. Python中Cookie模块(python3中为ht ...
- 时间>金钱
时间>金钱! 如果有机会,用你的金钱去换取别人的成功经验,一定要抓住一切机会向顶尖人士学习. 仔细选择你接触的对象,因为这会节省你很多时间. 假设与一个成功者在一起,他花了10年时间成功,你跟1 ...
- SpringBoot(十三):springboot2.0.2定时任务
使用定义任务: 第一步:启用定时任务第二步:配置定时器资源等第三步:定义定时任务并指定触发规则 1)启动类启用定时任务 在springboot入口类上添加注解@EnableScheduling即可. ...
- 【一步步学OpenGL 20】 -《点光源》
教程 20 点光源 原文: http://ogldev.atspace.co.uk/www/tutorial20/tutorial20.html CSDN完整版专栏: http://blog.csdn ...
- Linux学习必备
17,继往开来 实践是检验真理的唯一标准! ---运维技术组----mvpbang #开源代码 https://github.com/ #目前最受欢迎的 https://gitee.com/ ...