精华内容
下载资源
问答
  • Python之Flash路由框架:初识Flash

    千次阅读 2019-10-24 10:53:05
    初识flash框架 1,Flash框架意义 Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature。 一,为什么要从Flask开始学习web框架? 1.python语言的灵活性给予了Flask同样的特征; 2.无论...

    初识flash框架

    授课:林德尧(泉舟时代-未来城市技术总监)
    1,Flash框架意义
    Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature。

    一,为什么要从Flask开始学习web框架?
    1.python语言的灵活性给予了Flask同样的特征;
    2.无论是用户画像还是产品推荐,python相比其他语言都有极大的优势;
    3.Flask轻便,容易上手,试错成本低

    2.Flask Prerequisite
    Flask上手前提少,能够极大帮助初学者快速理解web开发,这也是我喜欢Flask的原因。
    (1)面向对象编程(Object-Oriented Programming, OOP)
    相信绝大多数人都接触过OOP,比如使用Java, Python, Go等。在Flask中,涉及基础OOP的概念,包括对象、类、继承、封装等。
    (2)python基础
    Flask中涉及简单python概念,包括模块、包、装饰器、模块等。
    (3)命令行基础
    大部分的开发都绕不开命令行,Flask同样要求基础命令行操作,例如上传服务器、查询文件、修改配置文件等。
    (4)数据库基础
    web开发会产生数据管理的问题,虽然可以使用非数据库的方式搭建静态网页,但从长远来看将,掌握一门基础的数据库工具是很有必要的。比如结构化数据库Mysql, Postgresql,非结构化的MongoDB, Redis等。
    (5)前端基础
    虽然搭建网站主要是后台逻辑编写,但今天越来越多的人在意前台展现,因此Flask除了后台python语言的要求外,还要求掌握基础的html, JavaScript, CSS。
    (6)版本控制
    版本控制是所有程序开发的基础,了解基础的版本控制可以大大提高开发的效率。掌握基础的git技能会提高Flask网站开发速度。

    $ pip install flask
    4.初始化(Initialization)
    (1)创建flask实例对象
    flask程序必须创建一个程序实例,常用方法:

    **from flask import Flask
    app = Flask(__name__)**
    

    这里的app就是一个程序实例,客户端(一般是浏览器)将请求发送给服务端Web服务器,Web服务器再把请求发给Flask实例。
    (2)构建实例对象从URL到python函数的映射关系
    程序实例需要知道所有URL对应的执行代码,所以要有从URL到python函数的映射关系。处理URL到python函数映射关系的程序一般叫做路由(Router)。
    Flask实现中一般通过python装饰器来实现,例如:

    **@app.route('/')
    def index():
     return '<h1> test</h1>'**
    

    上面的程序从程序化实例app开始,构建了根目录’/'的路由,具体实现的程序是index()函数,返回了一段html代码’test’字符串。
    路由所对应的程序称为视图函数(view function),即上面的index()函数。
    (3)启动服务器
    程序实例用run方法来启动服务器,例如:

    if __name__ == '__main__':
        app.run(debug=True, port=8777)
    

    上面的程序是常见套路,当前python文件被执行的时候,运行flask实例化对象的run方法,启动服务器,同时上面程序设定了两个常用参数:debug为True,端口是8777,避免和其他应用的端口冲突。
    (4)请求上下文
    Flask使用上下文把一些视图函数的对象变成全局可访问,共有4中模式:

    变量名 上下文 说明
    current_app 程序上下文 当前激活程序的程序实例
    g 程序上下文 处理请求时用作临时存储的对象。每次请求都会重设这个变量
    request 请求上下文 请求对象,封装了客户端发出的 HTTP 请求中的内容
    session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典
    5.模板
    业务逻辑和表现逻辑分开,才能开发出易维护的网站,表现逻辑往往放在模板中。
    Flask的模板默认在根目录的templates中,例如:

    from flask import Flask, render_template
    from datetime import datetime
    
    app = Flask(__name__)
    
    @app.route('/<name>')
    def index(name):
        return render_template('index.html', name=name)
        
    if __name__ == '__main__':
        app.run(debug=True, port=8777)
    

    index.html页面可以独立出来专门处理网站的表现逻辑,例如:

    {% block title %}Main{% endblock %}
    
    {% block page_content %}
    <div class="page-header">
        <h 1>Hello World!</h 1>
        <h 2>Hello, 
            {% if name %}{{ name }}
            {% else %}Stranger{% endif %}!
        </h 2>
    </div>
    {% endblock %}
    

    Flask默认使用Jinjia2进行模板渲染,可以用一些控制语句,例如上面的if else判断。

    展开全文
  • 前两天参加阿里云7天培训,用python+Flask写了...那么怎么在不同的路由之间去传递参数呢? 我想到是设置的全局变量去解决这个问题,上代码 FrontResult={}#定义的全局变量字典 @app.route('/add',methods=['POST','GET.

    前两天参加阿里云7天培训,用python+Flask写了一个基于阿里云视觉AI平台的识别身份证、驾驶证以及车牌自动生成汽车保险单(这么一个小玩意,搞了我一晚上,头疼,到最后还是个半成品)

    通过上传身份证、驾驶证以及车牌,调用阿里云的API,去识别图片里信息,将返回的信息回填到一个汽车保险单上。
    那么怎么在不同的路由之间去传递参数呢?
    我想到是设置的全局变量去解决这个问题,上代码

    FrontResult={}#定义的全局变量字典
    @app.route('/add',methods=['POST','GET'])
    def add():
        # 简单的过滤掉无效post请求
        print(request.form)
        # return render_template('submit-index.html')
        if request.form['id'] =='bei':
            card_id=request.form['q']
            # dr_id=request.form['a']
            # car_id=request.form['s']
            global FrontResult
            FrontResult=deal_id(card_id)
            print(FrontResult)
            #deal_carid(dr_id)
            # deal_carid(car_id)
    
        else:
            pass
        # FrontResult={'Address': '河北省邯郸市肥乡县肥乡镇', 'Gender': '男', 'Nationality': '汉', 'Name': '常涛', 'IDNumber': '411526199706013217', 'BirthDate': '19970601'}
        return render_template('submit-index.html')
    
    @app.route('/new_index', methods=['POST', 'GET'])
    def new_index():
        global FrontResult
        print(FrontResult)
    
        # def enablePrint():
        #     sys.stdout = sys.__stdout__
        # enablePrint()
        return render_template('new_index.html',**FrontResult)
    

    成功解决不同路由之间参数的传递问题

    展开全文
  • Project name :Flask_Plan 上一篇文章,我们创建了默认的flask项目...现在我们创建访问路由,也就是访问地址对应的返回。 编辑Flask_Plan\Flask_Plan.py from flask import Flask app = Flask(__name__...

    Project name :Flask_Plan

     

    上一篇文章,我们创建了默认的flask项目,也可以运行起来。

    但是只有一个首页,只显示一个hello world。

    现在我们创建访问路由,也就是访问地址对应的返回。

    编辑 Flask_Plan\Flask_Plan.py

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    
    # 以下增加
    
    
    @app.route('/view_plan/')
    def view_plan():
        return '这是计划详细页面'
    
    
    @app.route('/view_date/')
    def view_date():
        return '这是历史详细页面'
    
    
    @app.route('/view_carriage/')
    def view_carriage():
        return '这是车辆详细信息'
    
    
    # 以上增加
    if __name__ == '__main__':
        app.run()
    View Code

    我增加了3个视图。

    启动试着访问一下

    http://127.0.0.1:5000/view_plan/

    http://127.0.0.1:5000/view_date/

    http://127.0.0.1:5000/view_carriage/

    这些都是死的,那么多详细页面,我们需要通过url把参数传过来,再根据传过来的参数,返回响应的数据。

    修改Flask_Plan\Flask_Plan.py

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    
    # 以下增加
    
    
    @app.route('/view_plan/')
    def view_plan():
        return '这是计划详细页面'
    
    
    @app.route('/view_date/<date>')  #增加<date>
    def view_date(date):               #把date传入显示函数
        return '这是历史详细页面%s'%date  #把date显示出来
    
    
    @app.route('/view_carriage/<carnum>') #增加<carnum>
    def view_carriage(carnum):              #把carnum传入显示函数
        return '这是车辆详细信息%s'%carnum #把carnum显示出来
    
    
    # 以上增加
    if __name__ == '__main__':
        app.run()
    View Code

    http://127.0.0.1:5000/view_date/123

    http://127.0.0.1:5000/view_carriage/1234

    好了,我们可以显示出url传入的参数了。

     

    转载于:https://www.cnblogs.com/jackadam/p/8128004.html

    展开全文
  • node 路由

    2016-02-25 15:20:28
    req.params 一个数组,包含命名过得路由参数 router.get(‘/user/shop/:id’, user.shop); 对于这样的路由,在controller获取产品的id,需要用: var productId = req.params.id; 2.req.body 一个对象,包含post...
    1. req.params 一个数组,包含命名过得路由参数
      router.get(‘/user/shop/:id’, user.shop);
      对于这样的路由,在controller获取产品的id,需要用:
      var productId = req.params.id;
    2.req.body 一个对象,包含post请求参数,这个一般都是form表单提交。这样命名是因为post请求参数在request正文中传递,而不像查询字符串在url中传递。要使req.body可用,需要中间件解析请求。下面是截取项目一段的用法.form是在html里面
    <form action="/user/savePassword" method="post">
            <section>
                <p>
                    <button class="retun_btn">原密码</button>
                </p>
                <input id="oldPsd" name="oldPasswd" type="password" name="" id="" value="" placeholder="请输入原密码"/>
            </section>
            <section>
                <p>
                    <button class="retun_btn">新密码</button>
                </p>
                <input id="newPsd" name="newPasswd" type="password" name="" id="" value="" placeholder="由6~18位数字、字母组成"/>
            </section>
            <p>
                <button class="chps_confirm">确认</button>
            </p>
            <input type="hidden" name="loadingText" id="loadingText" value="提交中,请稍后..."/>
        </form>
    
    在nodejs里面的controller
    UserController.prototype.savePasswd = function(req, res) {
        var oldPasswd = req.body.oldPasswd;
        var newPasswd = req.body.newPasswd;
        base.postJson({
            url: req.API_HOST + '/api/user/changePasswd',
            form: {
                userId: req.session.userId,
                oldPasswd: oldPasswd,
                newPasswd: newPasswd
            }
        }, function(result) {
            var msg = '';
            if (result.err_code == '0') {
                req.flash('msg', '密码修改成功');
                res.redirect('/user/info');
            } else {
                res.render('user/change-password', {
                    msg: result.err_msg
                });
            }
    
    
        }, req);
    };
    
    3.req.query一个对象,包含以键值对存放的查询字符串参数。在html页面下
     <a class="display-block clear pBottom1 ownCard" href="/user/invest/<%=productId%>?cardId=<%=ocard.id%>">
    在controller里面,获取var cardId = req.query.cardId;
    
    4.req.originalUrl这个属性返回了 路径和查询字符串(它们不包含协议,主机或端口)。这个旨在保留原始请求和查询字符串.
    router.get('/user/unpay', user.unpayList);
    在controller里面,unpayList的
    var originUrl = req.originalUrl
    那么originUrl的植就是/user/unpay。
    
    5.在node里面,表单提交,html页面里面的form表单的action最好给一个有效值,可以是action="javascript:;"也可以是一个提交地址,还有的是method = "post",这个方法要写出来
    
    6.res.locals和req.flash的用法
    router.all('/test', pay.test);
    在controller下面的一个方法
    PayController.prototype.test = function (req, res) {
           res.locals.msg = "这是一个测试";
           res.render('test');
    };
    
    在html页面上
    <body>
           <p><%=outString(msg)%></p>
    </body>
    html页面运行结果是<p>这是一个测试</p>
    因此res.locals是一个对象,包含用于渲染视图的默认上下文。res.render使用配置的模板引擎渲染视图。
    
    PayController.prototype.test = function (req, res) {
          req.flash("msg","这是一个测试");
           res.render('test',{msg:req.flash("msg")});
    };
    在html页面上
    <body>
           <p><%=outString(msg)%></p>
    </body>
    html页面运行结果是<p>这是一个测试</p>
    
    
    7.form表单提交出去,返回错误信息,回到当前提交的表单页面。例如。在code这个页面:
    这个页面的路由是:musicController.prototype.acticket = function(req, res) {
        res.locals.topMenu = "acticket";
        req.session.flagMusic = null;
        req.session.flagMusicGrab = null;
        req.session.flagMusicTicket = true;
        var userId = req.session.userId;
        if(userId){
           base.postJson({
                url: req.API_HOST + '/api/wechat/isNotActivateMusicCode',
                form: {
                    userId:req.session.userId,
                }
            }, function(result) {
                if (result.err_code == '0') {
                    res.render('music/acticket',{
                        isActive:result.data.acStatus,
                        msg:req.flash("msg")
                    });
                }else{
                     msg = result.err_msg;
                     res.render('music/acticket',{
                        msg: result.err_msg
                     });
                }
            }, req);
    
        }else {
            res.redirect('/login');
        }
    
    };
    <form action="/musicCode" method="post">
        <input type="text" maxlength="6" class="text-input" placeholder="输入激活码" name="codeMusic"/>
        <button type="submit" class="btn">激活门票</button>
    </form>
    <section id="msTip">
            <input type="text" name="" id="msg" value="<%=outString(msg)%>"/>
           </section>
    这个表单提交到
    router.post('/musicCode',music.musicCode);
    musicController.prototype.musicCode = function(req, res) {
        var code = req.body.codeMusic;
        base.postJson({
                    url: req.API_HOST + '/api/wechat/activateMusicCode',
                    form: {
                        userId: req.session.userId,
                        code:code
                    }
                }, function(result) {
                    if (result.err_code == '0') {
                        if(result.data.status == 0){
                            var msg = " ";
                            req.flash('msg', '激活码错误,请重新输入');
                            res.redirect('/musicf/acticket');
                        }else{
                            res.render('music/actsuc');
                        }
    
                    }else{
                        res.redirect('/musicf/acticket');
    
                    }
                }, req)
    };
    
    在controller里面
    EasonController.prototype.isExit = function(req, res) {
        var telphone = req.body.telephone;
        res.redirect("/easonPlay/lottery/"+"?tel="+telphone);
    };
    有一个路由
    router.all('/easonPlay/lottery',eason.lottery);
    
    EasonController.prototype.lottery = function(req, res) {
          var userId = req.session.userId;
          var tel = req.query.tel;//这样就可以获取到tel
          if(tel || userId){
            res.render('eason/lottery',{telPhone:tel});
          }else if(!userId || !tel){
            res.redirect("/easonPlay");
          }
    
    
    
    };
    
    在app.js里面有:
    app.set("title","myPhoto");
    那么在某一个html页面里面是
    <p><%=settings.title%></p>、
    那么运行结果是:
    <p>myPhoto</p>
    从express内部来看,它是用下面的javascript输出这个对象的:
    app.locals.settings = app.settings;
    
    展开全文
  • flash中会将“&”符号当分隔符处理,这样URL地址就变得不完整了,解决方法是将URL中的“&”改成“%26”即可。
  • flask正则匹配路由

    2018-08-06 18:37:52
    1.自定义转换器 class RegexConverter(BaseConverter): def __init__(self, url_map, *args): super(RegexConverter, self).__init__(url_... # 将接受的第1个参数当作匹配规则进行保存 self.regex = args[0] ...
  • laravel 路由 One of the coolest (arguably the coolest) features of Laravel is its amazing routing features. Coming from Codeigniter where all routing is done by controller and method names, this was a...
  • 一、动态路由RIP产生背景1、动态路由协议包括距离向量路由协议和链路状态路由协议。RIP(Routing InformationProtocols,路由信息协议)是使用最广泛的距离向量路由协议。RIP 是为小型网络环境设计的,因为这类协议的...
  • 路由与交换课程设计

    千次阅读 多人点赞 2019-01-09 01:21:16
     1)搭建公司私有局域网络环境,利用P AT技术,使用路由设备(路由器、防火器等)完成由局域网到互联网的接入。  2)在局域网中公司各部门间要使用vlan技术实现相互的隔离。  3)在广域网链路数据封装技术这方面...
  • 华为策略路由详解

    千次阅读 2021-02-25 15:23:40
    通过配置策略路由,可以用于提高网络的安全性能和负载分担。 策略路由PBR(Policy-Based Routing)是一种依据用户制定的策略进行路由选择的机制。 策略路由路由策略(Routing Policy)存在以下不同: 策略...
  • 路由与交换(一):路由概念及基本配置

    千次阅读 多人点赞 2020-03-12 13:42:07
    第一章--路由概念
  • 什么是路由路由就是查找路由表的一个过程 -知道目的地址 -分辨源从哪里学到 -发现可能路由 -选择最佳路由 -不停地检测与维护路由信息 路由表条目:  C直连路由:路由器连接到该网络  S静态路由:由...
  • 路由工作原理

    2019-11-08 20:05:30
    路由的工作原理 所谓的路由便是路由器从一个接口上收到数据包,根据数据包的目的地址进行分组的转发,寻找路径转发到另外的接口的过程。 路由器与交换机不同,交换机是由集成电路所组成的交换芯片来进行数据包的...
  • 几年前,极路由如日中天的时候,推出的“极硬货”路由器是一个比较鸡肋的产品。产品推出后,销售情况很一般,据说后来主要给一家公司做企业考勤应用了。这个路由器使用了MT7620A的芯片,同时内部增加了一个asm1061的...
  • python 全栈开发,Day120(路由系统, 实例化Flask的参数, 蓝图(BluePrint), before_request after_request) 昨日内容回顾 1.Flask: from flask import Flask app = Flask(__name__) # 从...
  • Cisco 路由启动

    2014-11-02 21:07:23
    Flash :如同PC机上的BIOS(基本输入输出系统),其中存放Cisco路由器的IOS,对它的维护主要是IOS的文件的备份和恢复。  :在enable状态下用dir命令,就可以查看到Flash上存储的IOS文件名及其大小。Flash是可编程...
  • 1.8 flask 路由

    2019-09-27 18:41:15
    2019年1月8日: Flask: session 小而精 第三方组件 相对不稳定 - 依赖第三方 1.from flask import Flask app = Flask(name) ...2.路由 @app.route("/",methods=["GET","POST"]) def index(): return 3....
  • BIZKEY便携路由刷OpenWRT

    2021-06-07 21:38:18
    路由器参数Flash:4M RAM:32M CPU:RT5350F
  • 1、什么是路由?什么是路由选择?跨越从源主机到目标主机的一个互联网络来转发数据包的过程,称为路由。路由器根据路由表选择到达目标网络的最佳路径的过程,称为路由选择。2、什么是路由技术?从源主机到目标主机有...
  • bhu,百米生活2,波讯等HQ61主板适用,需要flash编程器写入
  • 关注我,你的眼睛会怀孕1、什么是路由?什么是路由选择?跨越从源主机到目标主机的一个互联网络来转发数据包的过程,称为路由。路由器根据路由表选择到达目标网络的最佳路径的过程,称为路由选择。2、什么是路由技术...
  • 华为路由配置命令

    2020-12-15 10:42:06
    华为路由配置命令 display ip int brief 查看接口ip地址 display interface brief 查看接口的简要信息 display current-configuration 显示当前配置文件 display current-configuration 关键词(查看关键词当前...
  • 华为 静态路由与FTP备份

    千次阅读 多人点赞 2020-02-14 13:37:25
    创建hcia用户密码1008611,等级3级,指定FTP目录为flash;开启FTP server服务,指定vty及console认证为aaa。 配置静态路由 AR-1设备 AR-4设备 AR-2设备 AR-3设备配置的静态路由同上。 ping命令的测试(AR-1设备) ...
  • 目录 ...1.2NAND Flash/SPI-Nand Flash烧写方法 2.eMMC的u-boot烧写方法 3.UFS u-boot烧写方法 1.Flash的u-boot烧写方法 1.1SPI-Nor Flash烧写方法 uboot# mw.b 0x420000000 0xff 0x100000...
  • SPI FLASH NAND FLASH 和NOR FLASH 的关系

    千次阅读 2015-09-11 16:00:23
     英文全称是common flash interface,也就是公共闪存接口,是由存储芯片工业界定义的一种获取闪存芯片物理参数和结构参数的操作规程和标准。CFI有许多关于闪存芯片的规定,有利于嵌入式对FLASH的编程。现在的很多NOR...
  • 锐捷路由技术系列

    千次阅读 2020-05-24 15:04:59
    1、锐捷路由技术 | 锐捷路由器基本功能的初始化配置 主机名(推荐配置): Ruijie(config)#hostnameNAME-txt 将设备命名为NAME-txt 接口描述(推荐配置): XWRJ(config)#interfaceinterface-number XWRJ(config-...
  • 然后,从任何路由、控制器或组件中: this . flash . notice ( 'a notice message' ) ; this . flash . success ( 'a success message' ) ; this . flash . failure ( 'a failure message' ) ; 默认情况下,该...
  • flask路由的各种定义方式

    千次阅读 2018-06-01 17:34:37
    使用 methods 参数指定可接受的请求方式,可以是多种 @app.route('/',methods=['GET']) def hello(): return '<h1>hello world</h1>' 路由查找方式 同一路由指向两个不同的函数,在匹配过程中,...
  • orm之路由

    2018-11-19 13:18:00
    1.参数 第一个参数是正则表达式(如果要精准匹配:‘^publish/$’),或者加斜杠('^publish/') 第二个参数是视图函数(不要加括号) urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^publish/...
  • 路由交换命令

    2018-03-18 15:35:57
    :可选参数,只显示交换机动态学习到的 MAC 地址   switch(config-if)#duplex { full | half | auto }  指定接口的双工模式 full: 全双工 half :半双工 auto :自动协商   指定接口的通信速率: switch(config-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,201
精华内容 3,680
关键字:

flask路由参数