Flask 框架学习(一)

Flask 框架学习

现在网上的flask框架的学习资料有点少,到处扒拉扒拉之后干脆写个博客免得以后自己忘记了,同时也分享一下我的学习心得,直接进入正题吧,至于具体的安装之类的就不多说了,直接进入正题,

1、简单例子

以一个简单的flask为例,可以建个文件命令行跑一下试试

from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello_world():
    return "Hello World~~~"
if __name__ == '__main__':
    app.run()

先是这个

from flask import Flask

倒入Flask类,接下来这一句

app = Flask(__name__)

实例化对象 app ,参数为应用模块或包的名称,这里 _name_ 指的是 _main_ 主程序。

@app.route("/")

使用 route() 装饰器告诉 Flask 触发函数的 URL 。默认是127.0.0.1:5000,例如@app.route(“/test1.py”)那么访问的时候的url就是127.0.0.1:5000/test1.py

def hello_world():
    return "Hello World~~~"

定义的函数,用来生成相关联的 URL ,并返回需要在用户浏览器中显示的信息。

app.run()

运行服务器应用,运行后默认只有本地可以访问,且默认访问的ip和端口是127.0.0.1:5000,运行效果如下:
这里写图片描述
这里写图片描述
也可以使用自定义的主机和端口: app.run(host=”0.0.0.0”,port=8000)

2、模板使用

假设你的.py文件在xxx/目录下,那么你的模板就必须放在xxx/templates下,文件结构大概如下。

xxx
|-templates文件夹
|   |-index.html(模板文件)
|-templates1.py文件

根据上述的文件结构,举例说明如下:
首先是模板文件(xxx/templates/index.html)

<html>
  <head>
    <title>{{title}} - microblog</title>
  </head>
  <body>
      <h1>Hello, {{user.nickname}}!</h1>
  </body>
</html>

接下来是处理模板的.py文件(xxx/templates1.py)

from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
    user = { 'nickname': 'bendawang' } # fake user
    return render_template("index.html",
        title = 'Home',
        user = user)
app.run(debug=True)

效果如下:
这里写图片描述
在上面的程序中,我们从Flask 框架 import 了一个叫render_template的新函数,并用这个函数来渲染模板。并给这个函数赋予了模板文件名和一些变量作为参数。它将导入的变量替换掉模板中的变量占位符,并返回渲染后的模板。 在 Flask 底层,render_template 函数实际上是调用了Flask的一个组件:Jinja2模板处理引擎。是 Jinjia2 用导入的变量替换掉了模板中对应的 {{ … }} 代码块。

接下来是模板的流程控制, Jinjia2通过{% %}就可以添加if或是for循环,举例说明如下:
首先是模板文件(xxx/templates/index2.html)

<html>
<head>
    {%if title!=Null%}
    <title>{{title}} is in</title>
    {%else%}
    <title>no one in</title>
    {% endif %}
</head>
<body>
    <h1>hi {{user.name}}!</h1>
    {% for i in guest%}
    <p>{{i.name}} said : <b>{{i.said}}</b></p>
    {% endfor %}
</body>
</html>

接下来是处理模板的.py文件(xxx/templates2.py)

from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
    user = {"name":"Bendawang"} 
    guest = [
        {"name":"bdw12138","said":"bdw comming on!"},
        {"name":"BDW12138","said":"BDW comming on!"}
        ]
    return render_template("index2.html",title="bendawang_test",user=user,guest=guest)
app.run(debug=True)

运行效果如下图:
这里写图片描述

然后就是简单的模板继承功能:
我们先改造一下刚才的index2.html成如下的文件(base.html)

<html>
<head>
    {%if title!=Null%}
    <title>{{title}} is in</title>
    {%else%}
    <title>no one in</title>
    {% endif %}
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

然后编写一个index3.html让他继承与上述的base.html,如下(index3.html)

    {% extends "base.html" %}
    {% block content %}
    <h1>hi {{user.name}}!</h1>
    {% for i in guest%}
    <p>{{i.name}} said : <b>{{i.said}}</b></p>
    {% endfor %}
    {% endblock %}

在这个模板中,我们使用了 block 控制语句来定义继承模板内容的显示位置。注意:这个 block 语句中设置的名称必须唯一。extends 语句使两个模板关联了起来。Jinja2 在渲染index3.html模板时,发现 extends 语句,就会自动先引入 base.html 基础模板,并对两个模板中名为 content 的 block 语句进行匹配。

然后来的index2.html就成功分成了两个,一个base.html和一个index3.html,同样此时运行templates2.py,发现效果没变,所以这样分解之后便于以后的修改和编程,多的大家也都懂。

在这里,我在介绍一个更加工程化的文件结构,

microblog
    |-app文件夹
    |  |-templates文件夹
    |  |-__init__.py文件
    |  |-views.py文件
    |-run.py文件

这就是常用的flask的简单框架结构,现在我将templates1.py和index.html拆分成上述文件结构,具体操作如下:
1、首先将模板文件index.html放入templates文件夹下即可
2、接下来我们来拆分templates1.py,拆分之后如下
首先是 _init.py_文件

from flask import Flask
app = Flask(__name__)
from app import views

接下来是views.py文件

from flask import render_template
from app import app
@app.route('/index')
def index():
    user = { 'nickname': 'bendawang' }
    return render_template("index.html",
        title = 'Home',
        user = user)

最后是run.py文件

from app import app
app.run(debug = True)

然后就是需要命令行运行run.py就行了,具体的大家自己可以按照上述的说明自己建好文件之后读代码比较templates1.py慢慢体会就明白了。

不想自己搞的具体的templates1.py的简单工程文件可以在这里下载去看看,应该很容易就能看懂得。
http://download.csdn.net/detail/qq_19876131/9455913

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值