flask——路由

路由

  1. 路由参数

    可以通过标记部分将可变部分添加到URL。然后函数接受作为关键字参数,或者你可以使用转换器来指定参数类型。

        @app.route('/user/<username>')
        def show_user_profile(username)
            return 'user %s'%username
    
        @app.route('/post/<int:post_id>')
        def show_post(psot_id):
            return 'Post %s' %post_id
    
        @app.route('/path/<path:subpath>')
        def_show_subpath(subpath):
            return 'Subpath %s' %subpath

    转换器类型:

    string  (默认)接受不带斜杠的文本
    int     接受正整数
    float   接受正浮点值
    path    (❤ ω ❤)可看作接受斜杠的string
    uuid    接受UUID字符串
    
  2. url_for

    url_for() 函数最简单的用法是以视图函数名作为参数, 返回对应的 URL。

        @app.route('/user/<username>')
        def show_user_profile(username):
           #返回函数getAllUsers所对应的路由
            s=url_for('getAllUsers')
  3. redirect

        from flask import Flask,url_for,redirect
        ...
        @app.route('/user/<username>')
        def show_user_profile(username):
           #返回函数getAllUsers所对应的路由
            s=url_for('getAllUsers')
            #/allusers/
    
            #重定向到/allusers/
            return redirect(s)
  4. 蓝图

    什么是蓝图?
    一个蓝图定义了可用于单个应用的视图,模板,静态文件等等的集合。

    我什么时候会用到蓝图?
    蓝图的杀手锏是将你的应用组织成不同的组件,比如把admin,user相关的视图方法分为两个组件,一个是admin组件,一个是user组件.这时我们可以

  5. 创建蓝图

        # app.py
        from flask import Flask
        app=Flask(__name__)
    
        # config.py
        host='0.0.0.0'
        port=5001
        debug=True
    
        # route.py
        from app.app import app
        from app.route_user import user_app
        @app.route('/')
        def index():
            return "主页"
        @app.errorhandler(404)
        def miss(e):
            return
        app.register_blueprint(user_app,url_prefix='/user') # 注册user蓝图
    
        # route_user.py
        from flask import Blueprint, request
    
        user_app = Blueprint('user', __name__)  # 创建一个蓝图对象,用参数name和import_name初始化
        @user_app.route('/')
        def index():
            return '用户首页'
        @user_app.route('/add')
        def add():
            return '增加用户'
        @user_app.route('/login', methods=['POST', 'GET'])
        def login():
            md = str(request.method)
            if md.lower() == 'get':
                return '你将看到登录页面效果'
            elif md.lower() == 'post':
                # 第一种方式
                # post:form-data
                # post:x-www-form-urlencoded
                # key一定要与客户端提交的字段保持一致
                # print(request.form) # ImmutableMultiDict([('userid', '001'), ('password', '0522')])
                # print(request.form['userid'])
                # print(request.form['password'])
    
                # 第二种方式
                # values既可以接受GET参数也可以接受POST参数
                # print(request.values['userid'])
                # print(request.values['password'])
                print(request.method)
                print(request.url)
                print(request.base_url)
                return '..............'
            else:
                return '我什么都没有做'
        '''
           get数据格式
    
           url?key=value&key2=value2
    
           请求数据和路由没有关系 
        '''
        @user_app.route('/search')
        def search():
            # 获取get数据的方式一
            # args=request.args
            # print(args)
            # print(args['id'])
            # print(args.get('password'))
    
            # 第二种方式
            # print(request.args['id'])
            # print(request.args['password'])
    
            # 第三种方式
            print(request.values['id'])
            print(request.values['password'])
    
            print(request.url)
            print(request.base_url)
            return '..............'

猜你喜欢

转载自blog.csdn.net/FeiChen_/article/details/81637446
今日推荐