• Flask初级(九)flash与前台交互get详解


    Project name :Flask_Plan

    templates:templates

    static:static

    @app.route('/')
    def hello_world():
        return 'index default'

    直接get访问域名       http://127.0.0.1:5000

    @app.route('/view_plan/')
    def view_plan():
        return render_template('plan.html')  # 此行修改

    get访问子目录  http://127.0.0.1:5000/view_plan

    @app.route('/view_date/<date>')  # 增加<date>
    def view_date(date): # 把date传入显示函数
    print(date)
    return render_template('plan.html')

     get访问子目录,带参数   http://127.0.0.1:5000/view_date/20171212

    后台会打印20171212

    曾经让我冥思苦想2天的一个问题是:

    上面3个路由和视图函数都写好了

    http://127.0.0.1:5000/view_date/20171212

    http://127.0.0.1:5000/view_plan

    可以正常访问

    http://127.0.0.1:5000/view_plan/20121212

    http://127.0.0.1:5000/view_date/

    直接404错误

    如何使404错误的可以正常访问呢?

    使用request。

    from flask import Flask, render_template ,request

    首先引入request

    @app.route('/view_plan/')
    def view_plan():
        date = request.args.get('date')
        print(date)
        return render_template('plan.html')  # 此行修改
    
    
    # 历史计划的查询,输入日期,即可显示历史日期的计划
    @app.route('/view_date/')  # 增加<date>
    def view_date():  # 把date传入显示函数
        date = request.args.get('date')
        print(date)
        return render_template('plan.html')  # 此行修改

    然后修改视图函数。

    访问的时候这样:

    http://127.0.0.1:5000/view_plan/

    http://127.0.0.1:5000/view_date/

    都是正常访问。

    http://127.0.0.1:5000/view_plan/?date=20171212

    http://127.0.0.1:5000/view_date/?date=20171212

    也可以正常访问了。多个参数可以用&连起来

    http://127.0.0.1:5000/view_date/?date=20171212&carriage=552828

    后台:

    request.args.get(date)
    request.args.get(carriage)

     这样的地址看起来就像是动态地址。

    想使用静态地址方式的方法有以下两种:

    一:建立两条路由,视图函数引用。

    @app.route('/hello/')
    def hello(name='jack'):
        return 'hello %s'%name
    
    @app.route('/hello/<name>')
    def helloname(name):
        return hello(name)

     

    访问 则使用视图函数hello,并将name设一个默认值jack

    访问 /rose  则使用视图函数 helloname,实际是使用hello函数


    一:使用路由的default参数:

    @app.route('/', defaults={'name': 'jack'})
    @app.route('/<name>')
    def hello_world(name):
        return 'hello %s'%name

    两个路由装饰器,

    看着应该是使用  ‘/<name>’,如果name没有提供,那么就使用默认值:jack

    二:使flask路由解析支持正则表达式。

    另一种解法:给flask的url路由增加正则功能。

    from flask import Flask, render_template ,request 
    from werkzeug.routing import BaseConverter     #此行新增
    app = Flask(__name__)
    class RegexConverter(BaseConverter):           #此函数新增
        def __init__(self, url_map, *items):
        super(RegexConverter, self).__init__(url_map)
        self.regex = items[0]
    
    app.url_map.converters['regex'] = RegexConverter    #此对象新增
    
    @app.route('/')
    def hello_world():
        return render_template('plan.html',)
    @app.route('/hello/<regex(".*"):name>')             #关键的路由正则匹配
    def hello(name):                                    #对应的视图函数,随便你怎么写吧。
        if name =='':
            return 'hello no name'
        else:
            return "hello '%s'" % (name)    

    引用BaseConverter,创建类 RegexConverter

    实例化RegexConverter

    在路由中使用正则规则/hello/<regex(".*"):name>

    其中/hello/是固定匹配的前缀,就和匹配/hello/一样,<regex(""):>应该是规范格式,“.*”双引号里面是正则表达式,name冒号后面是命名这个变量,给下面的函数交互输入。

    可匹配

    /

    /***

    并把***传入视图函数。

  • 相关阅读:
    SpringMVC的DispatcherServlet加载过程
    SpringMVC-HandlerMapping和HandlerAdapter
    FactoryBean简介
    Spring IOC过程
    redis基本数据类型和对应的底层数据结构
    工厂模式
    springmvc工作原理
    Java虚拟机系列-Java类加载机制
    2019年10月21日 数据库sql只取最新一条的数据
    洛谷 P2606 [ZJOI2010]排列计数
  • 原文地址:https://www.cnblogs.com/jackadam/p/8144989.html
Copyright © 2020-2023  润新知