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) 读 ...
 - c# js 删除table原行数据
			
function addtreetotable(obj){ var table1 = document.getElementById("Table1"); var hang = ...
 - Linux之nginx反向代理+三台web+nfs共享存储实现集群配置
			
作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...
 - ASCII到Unicode到UTF-8
			
1.很久以前使用的是ASCII:只有一个字节,也就是2的8次方,可以表示256个不同状态,电脑最初起源于美国,够用了,刚开始只是使用了127位,后来后面的部分被他们用来表示一些横线字符之类的128-2 ...
 - 【分块】教主的魔法 @洛谷P2801/upcexam3138
			
时间限制: 1 Sec 内存限制: 128 MB 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列, ...
 - ACM-ICPC 2018 南京赛区网络预赛 E题
			
ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...
 - NLP第3章 中文分词技术
 - LIN 笔记
			
LIN 使用了 1 根线来进行通信,但是,它必须要参考 VBat 和 GND.离开这两个参考电平,并没有办法来判断线上的 bit 状态. 另外,根据经典的 LIN 驱动电路(一个 OC 门),RX 接 ...
 - html5学习笔记3——高级特性
			
一:Web存储 数据以 键/值 对存在, web网页的数据只允许该网页访问使用. web存储有两种: localStorage - 没有时间限制的数据存储,存于浏览器缓存 sessionStorage ...
 - exception The valid characters are defined in RFC 7230 and RFC 3986
			
1.情景展示 当你使用浏览器进行问号传参与后台进行交互时,会报这个异常. tomcat控制台报错信息如下: The valid characters are defined in RFC 7230 ...