项目地址: https://coding.net/u/bwael/p/micblog/git
1. 开发环境
- 在linux系统开发
- 开发语言python,使用框架flask
- 使用Mysql数据库,初期使用sqlite方便开发
2. 环境配置
1. flask的安装
创建一个全新的实验环境,则安装python虚拟软件管理包virtualenv来创建python的
独立环境,先更新软件包,在安装pip和虚拟环境virtualenv:$ sudo pacman -Syy
$ sudo pacman -S python-pip python-virtualenv
创建虚拟环境,先创建一个虚拟环境flask,在激活环境,
$ virtualenv flask
$ cd flask
$ source bin/activate
1
2
3$ pip install flask flask-login flask-openid flask-mail splalchemy
flask-sqlalchemy sqlalchemy-migrate flask-whooshalchemy flask-wtf pytz
flask-babel flup
2. 体验flask
- 在home/bwael目录下
1 | $ mkdir -p micblog/app |
tips:我们的应用程序包是放置在app文件夹中,子文件夹
static用来放置静态文件,子文件夹templates是存放模板文
件类的html文件。
接下来进入到app文件夹中,并创建init.py和views.py
1
2
3$ cd micblog/app
$ touch __init__.py
$ touch views.py对app包通过命令vi_init_.py进行简单的初始化,在init.py中写
1
2
3from flask import Flask
app = Flask(__name__)
from app import views
上面的代码简单的创建应用对象,接着从app中导入视图模块views文件内容,视图是响应来自网页浏览器的请求的处理器,在flask中视图以python函数形式表示。
- 编写视图函数(app/views.py)
1
2
3
4
5from app import app
def index():
return "Hello!!"
完整的web应用程序最后一步建一个脚本rnu.py,用于启动应用程序的开发web服务器,将其置于micblog目录下。
- micblog/run.py
1 | from app import app |
启动运行后在客户端的浏览器中输入http://127.0.0.1:8888,在网页中会显示hello!字符串。
###3. flask模板
模板中的控制语句,在模板中添加一个if声明(app/templates/index.html)
1
2
3
4
5
6
7
8
9
10
11
12<html>
<head>
{% if title %}
<title>{{ title }} - microblog</title>
{% else %}
<title>Welcome to microblog</title>
{% endif %}
</head>
<body>
<h1>Hello, {{ user.nickname }}!</h1>
</body>
</html>模板中的循环语句,在microblog应用程序中,登陆的用户在首页想要展示自己或者联系人列表中用户最近的文章,我们首先创建一些用户以及他们的文章来展示(app/views.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16def index():
user = { 'nickname': 'Miguel' } # 用户名
posts = [ # 提交内容
{
'author': { 'nickname': 'John' },
'body': 'Beautiful day in Portland!'
},
{
'author': { 'nickname': 'Susan' },
'body': 'The Avengers movie was so cool!'
}
]
return render_template("index.html",
title = 'Home',
user = user,
posts = posts)在模板中,列表中可能有许多元素,有多少篇文章被展示取决于视图函数,模板不会假设有多少文章,所以必须准备渲染视图传送的文章数量,使用for来做到这一点(app/templates/index.html)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<html>
<head>
{% if title %}
<title>{{ title }} - microblog</title>
{% else %}
<title>microblog</title>
{% endif %}
</head>
<body>
<h1>Hi, {{ user.nickname }}!</h1>
{% for post in posts %}
<p>{{ post.author.nickname }} says: <b>{{ post.body }}</b></p>
{% endfor %}
</body>
</html>在模板继承中,允许我们把所有模板公共的部分移除出页面的布局,接着把它们放在一个基础模板中,所有使用它的模板可以导入该基础模板。定义一个基础模板,该模板包含导航栏以及标题(app/templates/base.html)
1
2
3
4
5
6
7
8
9
10
11
12
13
14<html>
<head>
{% if title %}
<title>{{ title }} - microblog</title>
{% else %}
<title>microblog</title>
{% endif %}
</head>
<body>
<div>Microblog: <a href="/index">Home</a></div>
<hr>
{% block content %}{% endblock %}
</body>
</html>在这个模板中使用block控制语句来定义派生模板可以插入的地方,块被赋予唯一的名字。接着就是修改index.html模板继承自base.html(app/templates/index.html)
1
2
3
4
5
6
7{% extends "base.html" %}
{% block content %}
<h1>Hi, {{ user.nickname }}!</h1>
{% for post in posts %}
<div><p>{{ post.author.nickname }} says: <b>{{ post.body }}</b></p></div>
{% endfor %}
{% endblock %}