Python学习——《FlaskWeb开发》笔记(一)
第一部分 Flask 简介
第 1 章 安装
Flask 有 3 个主要依赖:
- 路由、调试和 Web 服务器网关接口子系统由 Werkzeug 提供;
- 模板系统由 Jinja2 提供;
- 命令行集成由 Click 提供。
这些依赖都是 Flask 的开发者 Armin Ronacher 开发的。
原生不支持数据库访问、Web 表单验证和用户身份验证,但是可通过拓展形式实现。
- 虚拟环境安装 pip install virtualenv
Windows 注意修改 PATH 环境变量
第 2 章 应用的基本架构
初始化应用实例
所有来自客户端的请求都交由应用实例(Flask 类对象)处理。
路由和视图函数
客户端(Web)浏览器把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask 应用实例。 应用实例保存 URL 请求到 Python 函数的映射关系,处理 URL 和函数之间关系的程序称之为路由。
最简单的方法(app.route)装饰器:
1
2
3@app.route('/')
def index()
return '<h1>Hello World!</h1>'index()这样处理入站请求的函数称之为视图函数,函数的返回值称之为响应,是客户端接收到的内容。
路由 URL 中放在尖括号里面的内容是动态部分,任何能匹配到静态部分的 URL 会映射到这个路由上,调用视图函数时, Flask 会将动态部分作为参数传入函数
1
2
3@app.route('/user/<name>') # 任何匹配静态部分的URL都走这个路由
def user(name): # 尖括号里的name作为参数传递进视图函数
return '<h1>Hello, {}!</h1>'.format(name)请求-相应循环
应用和请求上下文 请求对象封装了客户端发送的 HTTP 请求。方便使用,会通过上下文变为全局可访问。 上下文全局变量:current_app, g, request, session
- 请求分派 URL 映射,路由。Flask 为每个路由都制定了请求方法,这样即使不同的请求方法发送到相同 URL 上,也会 使用不同的视图函数来处理
- 请求对象 上下文变量 request 对外开放请求对象,包含全部信息。
- 请求钩子 请求钩子通过装饰器实现,四种钩子:before_request, before_first_request, after_request, teardown_request
- 响应 多数情况下,视图函数返回值作为响应内容。字符串,状态。response 对象。URL 重定向。
Flask 扩展
第 3 章 模板
模板是包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。 使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。Jinja2
变量 大括号两层括起来的部分就是变量,可以识别复杂类型,加过滤器(渲染时事变变换),如|capitalize, |lower ,|upper, |title, |trim, |striptags:.
{{ name }} 表示name是等待视图函数传递的变量 eg <p> A value from a dictionary : {{ mydict['key'] }}, </p> <p> A value from a list : {{ mylist[-1] }}, </p> <p> A value from a dictionary with 过滤器: {{ mydict['key']|striptags: }}, </p>
控制结构
条件判断
{% if user %} Hello, {{ user }} {% else %} Hello. Stranger {% endif %}
初步尝试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36{% extends "bootstrap/base.html" %} {% block title %}Flasky{% endblock %} {%
block navbar %}
<div class="navbar navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button
type="button"
class="navbar-toggle"
data-toggle="collapse"
data-target=".navbar-collapse"
>
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">Flasky</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
</ul>
</div>
</div>
</div>
{% endblock %} {% block content %}
<div class="container">
<div class="page-header">
{% if name == "ryx" %} {# 注意==符号还有 双引号 #}
<h1>Hello, 大哥 {{ name|striptags: }}!</h1>
{% else %}
<h1>Hello, 小老弟 {{ name|striptags:}}!</h1>
{% endif %}
</div>
</div>
{% endblock %}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!