flask——简单博客⽰例教程(⼀)
原⽂:
Flask从⼊门到做出⼀个博客的⼤型教程(⼀)
本项⽬全部在虚拟环境中运⾏,因此请参照前⾯的⽂章,链接为建⽴虚拟环境后,再接着完成本教程的学习。
0 开始之前
⽹上看了很多教程,都不是很满意,因此⾃⼰写⼀个⼤型教程,从⼊门到做出⼀个⽐较完整的博客。此次教程不是直接把整个博客直接代码整理出来然后运⾏⼀遍就完事,我会从flask的各个模块讲起。所以,如果你没有接触过flask,按照整个教程完整做⼀遍会掌握flask。(前提是你要有⼀定Python和web基础)
1 Hello world !
如果你接触过任何编程语⾔,对这个⼩标题都会很熟悉,此次对flask的学习也是从这个⼩例⼦开始。
准备⼯作环境
1 duke@coding:~$ mkdir flask_tutorial
2
3 duke@coding:~$ cd flask_tutorial/
4
5 duke@coding:~/flask_tutorial$ virtualenv --no-site-package venv
6 Using base prefix '/home/duke/.pyenv/versions/3.6.4'
7 New python executable in /home/duke/flask_tutorial/venv/bin/python3.6
8 Also creating executable in /home/duke/flask_tutorial/venv/bin/python
9 Installing setuptools, pip, done.
10
11 duke@coding:~/flask_tutorial$ source venv/bin/activate
12#进⼊Python虚拟环境
13 (venv) duke@coding:~/flask_tutorial$
14 (venv) duke@coding:~/flask_tutorial$ pip install flask
15#创建flask⽬录
16 (venv) duke@coding:~/flask_tutorial$ mkdir flask
17
18 (venv) duke@coding:~/flask_tutorial$ cd flask/
19
20 (venv) duke@coding:~/flask_tutorial/flask$
正式开始
1 (venv) duke@coding:~/flask_tutorial/flask$ mkdir app
2
3 (venv) duke@coding:~/flask_tutorial/flask$ cd app/
4#创建初始化⽂件
5 (venv) duke@coding:~/flask_tutorial/flask/app$ touch __init__.py
在_ _ init _ _.py中写如下代码,你可以使⽤pycharm,vscode等IDE来更快的书写代码。
app/_ _ init _ _.py : 项⽬初始化
1from flask import Flask
2#创建app应⽤,__name__是python预定义变量,被设置为使⽤本模块.
3 app = Flask(__name__)
4#如果你使⽤的IDE,在routes这⾥会报错,因为我们还没有创建呀,为了⼀会不要再回来写⼀遍,因此我先写上了
5from app import routes
创建路由模块,你可以使⽤IDE直接新建,没有必要要使⽤命令⾏创建
1 (venv) duke@coding:~/flask_tutorial/flask/app$ touch routes.py
app/routes.py : 主页路由
1#从app模块中即从__init__.py中导⼊创建的app应⽤
2from app import app
3
4#建⽴路由,通过路由可以执⾏其覆盖的⽅法,可以多个路由指向同⼀个⽅法。
5 @ute('/')
6 @ute('/index')
7def index():
8return"Hello,World!"
现在基本都齐全了,但是我们还是需要在app模块之外创建⼀个主⼊⼝,即执⾏这个主⼊⼝就可以达成运⾏整个项⽬的⽬的。
1 (venv) duke@coding:~/flask_tutorial/flask/app$ cd ..
2 (venv) duke@coding:~/flask_tutorial/flask$ touch myblog.py
myblog.py : 项⽬⼊⼝
1#从app模块中导⼊app应⽤
2from app import app
3
4#防⽌被引⽤后执⾏,只有在当前模块中才可以使⽤
5if__name__=='__main__':
6 app.run()
现在整个⼩demo就完成了,结构应该是这样的
1 flask
2├── app
3│├──__init__.py
4│└── routes.py
5└── myblog.py
ok,接下来就让项⽬跑起来
1 (venv) duke@coding:~/flask_tutorial/flask$ export FLASK_APP=myblog.py
2
3 (venv) duke@coding:~/flask_tutorial/flask$ flask run
4 * Serving Flask app "myblog.py"
5 * Environment: production
6 WARNING: Do not use the development server in a production environment.
7 Use a production WSGI server instead.
8 * Debug mode: off
9 * Running on 127.0.0.1:5000/ (Press CTRL+C to quit)
在浏览器⾥输⼊或者都可以访问你的项⽬啦!
2 模板
在1⾥,我们完成了⼀个返回值的显⽰,但这肯定远远不能满⾜我们需求的。因为我们希望看到的是丰富多彩的⽹页呀~,有什么办法呢?上⼀步咱们返回了⼀个值,那咱们返回⼀个⽹页会怎么样呢?
app/routes.py : 返回⼀个⽹页
1from app import app
2
3 @ute('/')
4 @ute('/index')
5def index():
6 user = {'username':'duke'}
7 html = '''
8 <html>
9 <head>
10 <title>Home Page - Microblog</title>
11 </head>
12 <body>
13 <h1>Hello, ''' + user['username'] + '''!</h1>
14 </body>
15</html>
16网页app
17'''
18return html
如图所⽰,这样就完成了返回⽹页的⽬的,但是这样实在是太⿇烦了,因此肯定有解决这个问题的办法喽。对,模板就是解决这个问题的办法。
1 (venv) duke@coding:~/flask_tutorial/flask$ mkdir app/templates
2#在新建的templates中新建⼀个index.html
3 (venv) duke@coding:~/flask_tutorial/flask/app/templates$ touch index.html
app/templates/index.html : 主页模板,将数据显⽰在其中
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>{{ title }} - 博客</title>
6 </head>
7 <body>
8 <h1> Hello ,{{ user.username }} !</h1>
9 </body>
10 </html>
这⾥出现{{ }} 意味着变量,可以接受数据的地⽅。既然在这⾥写了变量,那么就要在路由中修改对应的格式,因为要把数据返回才可以。
app/routes.py : 将写在路由中的html删除,并增加⼀些变量。
1#导⼊模板模块
2from flask import render_template
3from app import app
4
5 @ute('/')
6 @ute('/index')
7def index():
8 user = {'username':'duke'}
9#将需要展⽰的数据传递给模板进⾏显⽰
10return render_template('index.html',title='我的',user=user)
从新运⾏后,效果还是符合预期的。但是,如果你传递⾄模板的数据是空的,那页⾯显⽰岂不是很难看?因此我们需要在模板中加上⼀些判断,看数据是否为空。
app/templates/index.html : 主页模板,完善模板
1 <!DOCTYPE html>
2 <html >
3 <head>
4 <meta charset="UTF-8">
5 {% if title %}
6 <title>{{ title }} - 博客</title>
7 {% else %}
8 <title>欢迎来到博客!</title>
9 {% endif %}
10 </head>
11 <body>
12 <h1>Hello, {{ user.username }}!</h1>
13 </body>
14 </html>
如果传进来的数据很多,那么就可以使⽤循环来展⽰数据。⾸先,还是对路由⾥的⽅法进⾏修改。app/routes.py : 增加⼀些数据
1from flask import render_template
2from app import app
3
4 @ute('/')
5 @ute('/index')
6def index():
7 user = {'username':'duke'}
8 posts = [
9 {
10'author':{'username':'刘'},
11'body':'这是模板模块中的循环例⼦~1'
12
13 },
14 {
15'author': {'username': '忠强'},
16'body': '这是模板模块中的循环例⼦~2'
17 }
18 ]
19return render_template('index.html',title='我的',user=user,posts=posts)
增加了这些数据之后要对模板中的结构进⾏⼀些修改。
app/templates/index.html : 循环展⽰数据
1 <!DOCTYPE html>
2 <html >
3 <head>
4 <meta charset="UTF-8">
5 {% if title %}
6 <title>{{ title }} - 博客</title>
7 {% else %}
8 <title>欢迎来到博客!</title>
9 {% endif %}
10 </head>
11 <body>
12 <h1>你好呀, {{ user.username }} !</h1>
13 {% for post in posts %}
14 <div><p>{{ post.author.username }} 说:<b>{{ post.body }}</b></p></div>
15 {% endfor %}
16
17 </body>
18 </html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论