最近学习flask,由于web开发方面接触的并不是很多,所以看官方文档有点焦头烂额,好多的概念不理解。

《Flask web 开发》比较基础,先用这本书做个入门。

1、Flask实例化对象用来接收客户端的所有请求。

from flask import Flask
app = Flask(__name__)

2、路由实现URL和python函数之间的映射,应用python中的修饰器。

@app.route('/')
def index():
return '<h1>Hello World!</h1>

2.1 定义路由中的动态名字,用"<>"。

      @app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s!</h1>' % name

    2.2 路由中的动态部分默认为字符串,不过也可以使用其他类型。

int、float、path类型。

  path 类型也是字符串,但不把斜线视作分隔符,而将其当作动态片段的一部分。

3、程序实例用run方法启动 Flask 集成的开发 Web 服务器。

if __name__ == '__main__':
app.run(debug=True)#debug=true是启动调试模式。

4、模板与渲染模板

模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请
求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程
称为渲染。为了渲染模板,Flask 使用了一个名为 Jinja2 的强大模板引擎。

  4.1 flask在默认情况下,会在该目录下的templates文件夹中找模板,所以出于规范,需要将模板写到该文件夹中。

  4.2 flask通过render_template()方法将Jinja2渲染模板集成到程序中,render_template 函数的第一个参数是

模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。

5、Jinja2中涉及到的变量过滤器

  过滤器就是在变量之后,用竖线隔开,给变量添加一些功能。下面是Jinja2中一些常见的过滤器:

    

  6、Jinja2中的控制结构

  条件控制语句

    {%if xxx%}                         {% if user %}

      pass                                   Hello,{{user}}!

    {%else%}       >>>>>        {% else %}

      pass                                    Hello,Stranger!

    {%endif%}                            {% endif %}

  循环语句

    {% for %}                              {% for comment in comments %}

    pass                 >>>>>            {% <li>{{ comment }}</li> %}

    {% endfor %}                         {% endforr %}

Jinja2支持宏,类似与python中的函数

    {% macro render_comment(comment) %}
    <li>{{ comment }}</li>
    {% endmacro %}
    <ul>
      {% for comment in comments %}
      {{ render_comment(comment) }}
      {% endfor %}

    </ul>

    上面的例子就相当于python中定义一个render_comment(comment)函数,只是关键字不同,并且加入一个结束标识。

   其中macro为关键字,当宏结束时用endmacro表示。一般情况下,宏都会重复使用,所以将重复使用的代码写入单独的文件,

   为模板的调用提供方便;另一种重复代码使用的方式是模板继承,关键字extends表示继承,如果衍生模板需要继承基模板中的内容,用

   super()方法获取基模板中的内容。下面是继承的小例子:

   基模板  base.html

    <html>
    <head>
    {% block head %}
    <title>{% block title %}{% endblock %} - My Application</title>
    {% endblock %}
    </head>
    <body>
    {% block body %}
    {% endblock %}
    </body>
    </html>

衍生模板

    {% extends "base.html" %}
    {% block title %}Index{% endblock %}
    {% block head %}
    {{ super() }}
    <style>
    </style>
    {% endblock %}
    {% block body %}
    <h1>Hello, World!</h1>
    {% endblock %}

flask笔记一的更多相关文章

  1. flask笔记(三)Flask 添加登陆验证装饰器报错,及解析

    Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...

  2. Flask笔记1

    Flask笔记 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用. 一个 We ...

  3. Flask笔记:RESTful

    RESTful是用于前台和后端进行通信的一种规范或者说一种风格,采用的是HTTP和HTTPS协议,数据传输的格式使用的都是JSON,而不是XML.通常,RESTful的URL中只有名词,没有动词,而且 ...

  4. Flask笔记(一)

    first_flask_project.py # 从flask这个包中导入Flask这个类 # Flask这个类是项目的核心,以后很多操作都是基于这个类的对象 # 注册url.注册蓝图等都是基于这个类 ...

  5. flask笔记3-模板

    flask框架使用jinja2模板引擎.简单的说,模板就是一个纯html文件中夹杂着占位符,在渲染模板时用真实变量值替换占位符,就形成了最终的前台页面. 1.模板存放位置: 默认情况下,flask在根 ...

  6. flask笔记2-程序的基本结构

    第一个flask web程序 1.初始化(所有flask程序都必须创建一个程序实例,程序实例是Flask类的对象): from flask import Flask app = Flask(__nam ...

  7. flask笔记1-安装

    1.创建应用的根目录: 2.在根目录下创建独立的虚拟python运行环境,创建完成后当前目录会有一个文件夹,即该独立环境(使用--no-site-pachages参数将不会复制任何系统python环境 ...

  8. flask笔记---url、变量规则

    1.路由: route() 装饰器用于把一个函数绑定到一个 URL,可以动态变化 URL 的某些部分,还可以为一个函数指定多个规则,从而方便用户访问与记忆. 例子: @app.route('/') # ...

  9. flask笔记二

    web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...

随机推荐

  1. linux 内核的futex

    futex是linux内核为用户空间实现锁等同步机制而设计的同步排队(队列queueing)服务.在futex.c的注释中,futex起源于"Fast Userspace Mutex&quo ...

  2. python基本运算

    环境:python3.x a,b = 60,164 一.算数运算符 操作符 描述 例子 + 加法 a+b = 224 - 减法 a-b = -104 * 乘法 a*b = 9840 / 除(保留小数位 ...

  3. Python 基础之socket编程(二)

    Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...

  4. Oracle的instr函数

    instr函数 instr(目标字符串,被匹配的字符串,搜索的开始位置默认是1,第几次被搜索到) 例子1: SQL> select ename,instr(ename,'L',1,1) from ...

  5. Java常见快捷键

    1.Alt+/ 补充代码 2.shift+d 删除选中代码同时删除空格 3.shift+alt+R 改变所有与选中部分相同的字符串 4.ctrl+S 保存代码 5.ctrl+shift+F 格式化代码 ...

  6. 让Unity的Inspector面板支持字符限制(restrict)功能

    今天在优化红点组件,笔者打算将红点id由10进制改为16进制处理,就打算将红点id字段由uint类型改成string类型,用于填写16进制的字符(因为在Inspector面板里,uint/int类型字 ...

  7. Jdk1.6 JUC源码解析(12)-ArrayBlockingQueue

    功能简介: ArrayBlockingQueue是一种基于数组实现的有界的阻塞队列.队列中的元素遵循先入先出(FIFO)的规则.新元素插入到队列的尾部,从队列头部取出元素. 和普通队列有所不同,该队列 ...

  8. web 直播&即时聊天------阿里云、融云

    随着直播越来越火,所在公司也打算制作自己的直播,所以去了解了这方面,使用后发现还是有些问题需要记录的. 经过分析,制作直播应该是分为两块来做,即直播与实时评论.这里先去制作实时评论,等直播ok后,也会 ...

  9. Hive 桶的分区

    (一).桶的概念: 对于每一个表(table)或者分区, Hive可以进一步组织成桶(没有分区能分桶吗?),也就是说桶是更为细粒度的数据范围划分.Hive也是 针对某一列进行桶的组织.Hive采用对列 ...

  10. Another kind of Fibonacce(矩阵快速幂,HDU3306)

    Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...