Flask学习日志(二) - 最简单的Flask程序

壁纸.jpg

文 / 秦未

1.使用Pycharm建立项目

新建Flask项目.png

在Interpreter选项中选择上次我们上次建立的虚拟环境,并且给项目命名为app。

项目结构.png

打开以后,我们就能看到项目结构了,Pycharm自动为我们生成了简单示例的代码。

点击菜单上的Run -> Run 'app',你就能启动这个项目了,和上篇文章一样,默认访问的地址也是:http://127.0.0.1:5000

当然,你也可以试试使用别的地址,只需要修改一下 app.run() 即可,它里面的参数有很多,比如开启debug模式,指定运行端口也是很简单的,比如下面的代码,我们指定了它的运行IP和端口。

# /app/app.py    

app.run(host='127.0.0.1', port=8001)

没有什么特殊情况,我们在开发时IP端口保持默认就好,不过debug还是开着,方便调试。

# /app/app.py   

app.run(debug=True)

# 或者:

# app.debug = True

2.解释一下代码:

首先,我们导入了Flask类。这个类的实例将会是我们的 WSGI 应用程序。
接下来,我们创建一个该类的实例,第一个参数是应用模块或者包的名称。
如果你使用单一的模块(如本例),你应该使用 name ,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同( 也即是 'main' 或实际的导入名)。这是必须的,这样 Flask 才知道到哪去找模板、静态文件等等。详情见 Flask 的文档。
然后,我们使用 route() 装饰器告诉 Flask 什么样的URL 能触发我们的函数.
这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息。
最后我们用 run() 函数来让应用运行在本地服务器上。
其中 if name =='main':
确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。
欲关闭服务器,按 Ctrl+C。

3.使用模板

Flask 使用的是 Jinja2 模板引擎,Jinja2 是一个现代的,对设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全。

关于它具体的使用教程请查阅官方文档:欢迎来到 Jinja2

我现在只讲一下简单使用,首先我们看到自己的项目下有一个 templates 文件夹,这个文件夹是存放我们的html文件的,为了保持项目的整洁,我们在 templates 新建一个 blog 文件夹,然后在 blog 目录下新建一个index.html 文件。

现在我们的项目结构是这样的:

项目结构2.png

接下来,我们打开 app.py,我们能看到这样一段代码:

# /app/app.py   
from flask import Flask

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

我们修改为:

# /app/app.py   
from flask import Flask, render_template

@app.route('/')
def index():
    return render_template('blog/index.html', **{
        'text': 'Hello, World',
    })

这里我们做了什么?

首先我们导入了一个来自 Flask 方法 render_template ,从字面意思就可以明白 - “渲染模板”,OK,既然渲染模板,我们就 在index函数中使用它,render_template 方法有几个参数,第一个是模板的路径,我们刚才新建立了,所以只要填上就可以了,它会自动遍历 templates 目录下的文件或文件夹,找到我们指定的html文件,第二个参数,它接收一个字典,也就是说可以填入很多自定义的参数,比如 text='Hello, World' 等等,也是可以的,我为了代码整洁,直接写成了 **{'text': 'Hello, World',} 的形式,关于text,如果学过Django 的人应该明白这就是一个传到前台的参数,前台可以直接使用,那么我们来讲一下它的使用:

打开我们的 index.html 文件:

新增h1标签,内容填入:{{ text }}

<!--/app/templates/blog/index.html-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<h1>{{ text }}</h1>

</body>
</html>

好的,我们运行该项目吧:

运行情况1.png

可以看到我们的网页是有名字的,说明 title 生效了。

接下来,我们看看链接是如何实现的。

我们先在 app.py 里增加一个路由和视图函数:

# /app/app.py   

@app.route('/about')
def about():
    return '<h1>about</h1>'

然后在 index.html 中添加一个a标签,并且在href中填入:{{ url_for('.about') }}

<!--/app/templates/blog/index.html-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<h1>{{ text }}</h1>
<a href="{{ url_for('.about') }}">about</a>
</body>
</html>

url_for函数其实还有很多用法,这里我们只用到它直接输出链接的方法,它里面的参数 '.about' 中, about就是我们app.py里面的函数名。

运行后,我们点击 about ,就跳转到 http://127.0.0.1:5000/about 页面了。

然后,关于这个链接,我们还有静态文件的引用,这是必须要讲到的。

我们先在 static 目录下新建一个blog文件夹,然后在该目录下新建一个style.css文件。

现在我们的项目结构是这样的:

项目结构3.png

我在里面写了一个样式,为了证明后面的确引用成功。

然后我们在index.html中引入样式,其中的href参数:{{ url_for('static', filename='blog/style.css') }}

<!--/app/templates/blog/index.html-->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='blog/style.css') }}">
</head>
<body>

<h1>{{ text }}</h1>
<a href="{{ url_for('.about') }}">about</a>
</body>
</html>

第一个参数说明是静态文件(默认目录),第二个参数指定文件名并包含路径。

运行,成功引用:

运行状态2.png

其余文件,例如js,img同理,都是这样引用的。

千里之行始于足下,第一步已经迈出,加油!

---end---

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容