一直想做一整套的智能家居,顺便当作毕业设计,其中就有一个控制端,要能用web控制,安卓端控制。就选择了学这。写这个,记录一下。学的书是Flask Web开发 基于python的web应用开发实战【美】Miguel Grinberg著,安道译。
首先介绍一下。Flask是一个使用python编写的web应用框架。
使用的是python3.6,IDE是pychrm。
首先呢,要新建一个项目,再设置,再Projrct Interpreter中增加所需要的package。flask是必须的鸭。
初始化
from flask import Flask
app = Flask(__name__)
路由和视图函数
@app.route('/')
def index():
return '<h1>Hello World</h1>'
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s !</h1>' %name
启动服务器
if __name__ == '__main__':
app.run(debug=True)
然后运行,点击127.0.0.1:5000会出来一个网页,显示Hello World。
更改地址为127.0.0.1:5000/user/Bee
(Bee可以更改为别的名字),会出现Hello, Bee!
接下来是模板。Jinja2模板引擎
这个需要增加render_template
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template("index.html")
@app.route('/user/<name>')
def user(name):
return render_template('user.html',name=name)
if __name__ == '__main__':
app.run(debug=True)
模板文件实在templates中,需要自己创建模板文件。一个是index.html内容是
<h1>Hello World</h1>
另一个是user.html,内容是
<h1>Hello,{{name}}!</h1>
运行后效果其实跟第一个是一样的。
render_template函数的第一个参数是模板的文件名,随后的参数就是健对值。在这个例子中,就是收到一个名为name的变量。左边的name表示参数名,右边的name表示同名参数的值。
变量:
在模板中使用的{{name}}结构表示一个变量,是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取
Jinja2变量的过滤器
过滤器名 | 说明 |
safe | 渲染值时不转义 |
capitalize | 把值的首字母转换为大写,其他字母转换为小写 |
lower | 把值转换成小写形式 |
upper | 把值转换成大写形式 |
title | 把值中每个单词的首字母都转换成大写 |
trim | 把值的首尾空格去掉 |
striptags | 渲染之前把值中所有的HTML标签都删掉 |
默认情况下,出于安全考虑,Jinja2会转义所有变量。
控制结构。抄下几个例子。
条件控制语句
{% if user %}
Hello,{{ user}}!
{% else %}
Hello, Stranger!
{% endif %}
for循环
<ul>
{% for comment in comments %}
<li>{{comment}}</li>
{% endfor %}
</ul>
宏(没搞清楚)就不写上了。
接下来是使用Flask-Bootstrap需要在设置里面安装。首先依旧是导入,初始化
from flask_bootstrap import Bootstrap
from flask import Flask,render_template
app=Flask(__name__)
bootstrap = Bootstrap(app)
遇到一些问题,先写这么多。