Flask  轻量级WEB框架

静态网页:

不能与服务器交互的网页都是静态网页

动态网页:

能够与服务器进行交互的网页

WEB:浏览器 网页(前端三剑客)

服务器:

能够给用户提供服务的机器就是服务器

硬件来说就是一台主机

还要配备一个能够接受用户请求并给出响应用程序

APACHE

TOMCAT

IIS(Internet Information Service)

Nginx(Python用的较多)

作用:

存储WEB所需要的信息

所有的服务器都能够处理用户请求(request)并作出回应(response)

能够执行服务器端的程序

具备一定的安全性功能

框架:

是一种为了解决开放性问题而存在的一种结构

框架本身也提供了一些基本功能,

我们只需要在自己的基础功能上搭建属于自己的操作即可

Python的WEB框架:

Flask

Django

Tornado

Webpy

Flask框架:

什么是Flask?

Flask是一个基于Python并且依赖于jinja2模板引擎和

werkzeug WSGI(Web server Gateway Interface)

外部服务网关接口  服务的一个微型框架

Flask的框架模式:

Python的框架基本都是MTV的

M:Models  模型层

负责数据库建模 与数据库打交道

T:Templates 模板层

用于处理用户显示的网页内容

V:Views:视图层

用于处理与用户交互的部分  处理用户的请求并给出

响应内容的一段逻辑程序

而其他语言框架基本都是MVC:

M:Models 模型层

同上

V:Wiews  视图层

视图层 用处处理用户显示的内容的  等同于MTV的 T

C:Controller:控制器

处理用户的请求与响应等同于MTV的 V

python 全栈 python 全栈框架_服务器

安装:

在线安装

sudo pip3 install flask

离线安装:

9个依赖包  装到吐血身亡~   还是算了~~

Pycharm安装:

python 全栈 python 全栈框架_python 全栈_02

python 全栈 python 全栈框架_python全栈框架_03

python 全栈 python 全栈框架_Python_04

pip3可以下载安装包:

pip3 download 包名

验证安装:

import flask

版本信息:flask.__version__

安装好以后初始化项目:

打开终端

python 全栈 python 全栈框架_服务器_05

Paris@Python:~$ mkdir Flask

Paris@Python:~$ cd Flask/

Paris@Python:~/Flask$ mkdir FlaskProject

Paris@Python:~/Flask$ cd FlaskProject/

Paris@Python:~/Flask/FlaskProject$ touch run.py

Paris@Python:~/Flask/FlaskProject$ mkdir templates

创建好文件后用Pycharm打开

python 全栈 python 全栈框架_字符串_06

python 全栈 python 全栈框架_服务器_07

python 全栈 python 全栈框架_字符串_08

运行应用

python 全栈 python 全栈框架_服务器_09

from flask import Flask

app = Flask(__name__)

# 将主程序构建为 Flask应用命名为app

# 以便于处理用户request 给出response

@app.route("/")

def index():

return "这是首页  Hello World!"

# 配置路由

# 通过应用装饰器函数来构建视图函数  视图函数必须有return

# /表示网站的首页  根路径

if __name__ == "__main__":

app.run(debug=True, port=8888)

# 运行app应用 并开启调试模式

# 默认端口为5000 自定义端口为8888  可以省略

python 全栈 python 全栈框架_python 全栈_10

一个Flask框架就搭建好了

python 全栈 python 全栈框架_服务器_11

Flask路由(route):

什么是路由?

客户端发送给WEB服务器  WEB服务器再将请求发送给Flask程序实例

程序实例需要知道每个url请求要运行哪些代码,所以需要建立一个

url 到 python 函数的映射,处理url和函数之间的关系的程序就是

路由在Flask中,路由是通过 @app.route 装饰器来表示的

路由:

@app.route('/login')

def login():

return '这是登录页面'

@app.route('/register')

def register():

return '这是注册页面'

基本参数的路由:

# 定义带一个参数的路由

@app.route('/show1/')

def show1(name):

return "

姓名为:%s

" % name


多参数路由:

# 定义带两个参数的路由 参数可以更多

@app.route('/show2//')

def show2(name,age):

return "

姓名为:%s,年龄为:%s" % (name,age)

指定参数数据类型路由:

# 定义带两个参数的路由,其中,age参数指定为整数

@app.route('/show3//')

def show3(name,age):

# age : 为 整型,并非 字符串

return "传递进来的参数是name:%s,age:%d" % (name,age)

Flask中所有支持的类型转换器:

:

类型转换器指定类型  表示age参数是一个整数  数据类型

不写 默认字符串类型  不能有“/” 代表一个路径

int:  整型

float:浮点型

path: 字符串型  可以有斜杠

@app.route("/show//")

@app.route("/show///")

@app.route("show/")

多URL的路由匹配:

在一个视图函数上可以添加多个装饰器来指定rul路由的匹配规则

一个视图处理函数中设置多个url路由规则

# 多 URL 路由匹配 可以一直网上写~
@app.route('/')
@app.route('/index')
@app.route('/')
@app.route('/index/')
def index(page=None):
if page is None:
page = 1
return "当前页数为:%d" % page

路由设置HTTP请求方法

路由规则允许设置对应的请求方法

只有将匹配上请求方法路径交给视图函数处理去执行

@app.route('/post',methods=['POST','GET'])

def post():

return '这是post请求方式进来的'

只有POST请求方式允许访问  localhost:5000/post

URL 的解析

正向解析:

程序自动解析 根据@app.route() 装饰器中的访问路径来处理函数

反向解析:

通过视图处理函数的名称自动生成视图处理函数的访问路径

Flask中提供了url_for(fun, ...)函数  用于反向解析

参数:

fun:指向函数名称(通过app.route()装饰后的函数)

后续:对应要构建的url上的变量

@app.route('/url')
def url_views():
# 将 login() 反向解析访问地址
logUrl = url_for('login')
resp = "我要登录"
return resp
# 将 show2(name,age) 反向解析访问地址
url = url_for('show2',name = 'Paris',age = 18)
print(url)
resp = "" + url + "" 直接解析为超链接
return resp
特殊:
url_for("static", filename="style.css")

静态文件反向解析

模板:

什么是模板?

还是一个包含响应文本的文件 通常也是HTMl文件

该文件中可以包含“占位变量” 来表示动态的内容

具体值  只有在请求中才能获取  "占位变量"最后会被真实的值替换

模板最终也会被解析成响应的字符串  这一过程也称为"渲染"

Flask实际上是使用 Jinja2 强大的模板引擎

模板的设置:

默认情况下 Flask会在程序文件夹中的 templates 子文件夹中自动寻找模板

需要收动创建 templates 子文件夹  里面放HTML文件

python 全栈 python 全栈框架_Python_12

渲染模板:

在视图函数中  通过 return render_tepmlate() 将模板渲染成字符串再响应给客户端

render_template("xxx.html", arg1=value1, ...):

参数1:

xxx.html  要渲染给客户端的HTML模板文件

参数2~n:

可以省略   要传递给模板动态显示的变量占位符

返回值:

字符串

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
str = render_template('index.html')
print(str)
return str
if __name__ == '__main__':
app.run(debug=True,port=5555)