• 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
  • 相关阅读:
    vc++ generate random via random_device and uniform_int_distribution
    Windows OpenGL 图像对比度调节
    OpenGL ES 版本介绍
    Windows OpenGL 图像伽马线
    Windows OpenGL 图像反色
    OpenGL ES 简介
    Windows OpenGL ES 图像饱和度调节
    修改 Docker 数据根目录
    mysql分库备份与分表备份
    docker dockerfile 映射端口范围 批量映射端口
  • 原文地址:https://www.cnblogs.com/xiaozi/p/10376024.html
Copyright © 2020-2023  润新知