Flask (一) 简介
Flask简介
Flask是一个基于Python实现的Web开发‘微’框架 'MicroFramework'
Django是一个重型框架
官方文档: http://flask.pocoo.org/docs/0.12/
中文文档: http://docs.jinkan.org/docs/flask/
Flask和Django一样,也是一个基于MVC设计模式的Web框架
M:Model V:View C:Controller
MVVM, MVT
Flask依赖三个库
Jinja2 模板引擎 {% %} 模板:静态html+模板语言{% %}
Werkzeug WSGI工具集
Itsdangerous 基于Django的签名模块
流行的Flask
Flask流行的主要原因:
1. 有非常齐全的官方文档,上手非常方便
2. 有非常好的扩展机制和第三方扩展环境,工作中常见的软件都会有对应的扩展。自己动手实现扩展也很容易
3. 社区活跃度非常高
4. 微型框架的形式给了开发者更大的选择空间
MVC模式/MTV模式
一种软件设计典范,用一种业务逻辑,使数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面与用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化界面结构中。
核心思想:解耦
优点:降低各个模块之间的耦合性,方便变更,更容易重构代码,最大程度实现了代码的重用。
MVC(Model,View,Controller)
Model:用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑部分,Model通常只提供功能性的接口,通过这些接口可以获取Model的所有功能。
View:负责数据的显示和呈现,View是对用户的直接输出。
Controller:负责从用户端收集用户的输入,可以看成提供View的反向功能,主要处理用户交互。
MVT模式简介
本质上与MVC没什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同。
Model:负责业务对象与数据库(ORM)的对象, models.py: 数据
View:负责业务逻辑,并在适当的时候调用Model和Template, views.py:控制器
Template:负责把页面展示给用户, html: 界面
url:路由, urls.py
使用Flask
虚拟环境
1, virtualenv的概述
virtualenv是用来创建Python的虚拟环境的库,虚拟环境能够独立于真实环境存在,并且可以同时有多个互相独立的Python虚拟环境,每个虚拟环境都可以营造一个干净的开发环境,对于项目的依赖、版本的控制有着非常重要的作用。
虚拟环境有什么意义?
比如: 我们要同时开发多个应用程序,应用A需要Django1.11,而应用B需要Django1.8怎么办, 这种情况下,每个应用可能需要各自拥有一套独立的Python运行环境,virtualenv就可以用来为每一个应用创建一套'隔离'的Python运行环境。
2, 安装pip
【请使用普通用户】
a. 查看pip版本
查看pip版本: pip -V
查看pip3版本: pip3 -V
b. 安装pip(如果存在则不需要安装)
安装pip3: apt install python3-pip
安装pip2: apt install python-pip
c. 更新pip
更新pip (如果pip版本高于9.0则不需要更新):
更新pip3: pip3 install --upgrade pip
更新pip: pip install --upgrade pip
注意: 更新后如出现以下错误(这是pip 10.0.0版本的BUG):
Traceback (most recent call last):
File “/usr/bin/pip”, line 9, in
from pip import main
解决方法:修改对应pip文件中的代码(pip和pip3类似)
例如更新pip时报错则需要修改 /usr/bin/pip 文件中的代码,
使用: sudo vim /usr/bin/pip 打开pip文件
将:
from pip import main
if __name__ == '__main__':
sys.exit(main())
改成:
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
d. 让pip默认使用python3, 执行命令:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
e. pip命令
pip install xxx:安装xxx依赖包
pip list:查看所有依赖包
pip freeze:查看新安装的包
pip uninstall xxx :卸载xxx包
3, virtualenv和virtualenvwrapper 的安装和使用
【请使用普通用户】
a. 安装虚拟环境
sudo apt update
sudo pip3 install virtualenv virtualenvwrapper
安装后如果不能使用虚拟环境命令,则需要配置环境变量
1, 进入家目录: cd ~
2, 使用vim打开.bashrc, 定位到最后:shift+g,并添加以下2行代码(注意修改自己Ubuntu的用户名)
export WORKON_HOME=/home/自己Ubuntu的用户名/.virtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
3, 在家目录创建.virtualenvs目录: mkdir .virtualenvs
4, 加载修改后的设置,使之生效:source .bashrc
(如果找不到virtualenvwrapper.sh,
则将路径改成/usr/local/bin/virtualenvwrapper.sh
然后重试 )
b. 创建虚拟环境:
mkvirtualenv env
mkvirtualenv env2 -p /usr/bin/python3 (指定python路径)
c. 退出虚拟环境
deactivate
d. 进入虚拟环境:
workon 虚拟环境名称
第一个Flask项目
创建项目
创建虚拟环境
mkvirtualenv flaskenv
在虚拟环境中安装flask
pip install flask
创建helloFlask.py文件,并写入以下代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello Flask'
if __name__ == '__main__':
app.run()
run()启动的时候还可以添加参数:
debug 是否开启调试模式,开启后修改过python代码会自动重启
port 启动指定服务器的端口号
host 主机,默认是127.0.0.1,指定为0.0.0.0代表本机所有ip
flask-script插件使用
flask-script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本及其他运行在web应用之外的命令行任务;使得脚本和系统分开;
1.安装
pip install flask-script
2.初始化
manager = Manager(app)
3.调用
在run的地方修改,修改manager.run()
4.可以在命令行中使用: python manage.py runserver
还可以接收参数: python manage.py runserver -p 8000 -h 0 -d -r
p 端口 port
h 主机 host
d 调试模式 debug
r 重启(重新加载) reload(restart)
代码结构
static 静态资源文件
templates 模板文件
默认两个都可以直接使用, 直接使用相对路径就好
模板渲染
render_template()
其实也是分为两个过程,加载和渲染
template = Template(“<h2>呵呵</h2>”)
template.render()
静态使用,相当于反向解析
url_for(’static’,filename=‘hello.css’)
请求流程
项目拆分
代码全都写在manage.py一个文件中是不现实的, 我们可以对项目进行简单的拆分
将原来的app.py文件重命名为:manage.py
from flask_script import Manager
from App import create_app
# 创建app
app = create_app()
# 创建manager对象
manager = Manager(app)
if __name__ == '__main__':
manager.run()
新建目录App, 并在App的init文件中创建app对象
from flask import Flask
# 创建app
def create_app():
app = Flask(__name__)
return app
蓝图blueprint
1,宏伟蓝图(宏观规划)
2,蓝图也是一种规划,主要用来规划urls(路由)
3,蓝图基本使用
安装
pip install flask-blueprint
在views.py中初始化蓝图
blue = Blueprint('first', __name__)
在init文件中调用蓝图进行路由注册
app.register_blueprint(blueprint=blue)
route路由
路由:
将从客户端发送过来的请求分发到指定函数上
路由通过装饰器对应视图函数,并且可以接收参数,所以我们只需要在视图函数上使用装饰器即可
语法
@app.route(‘/rule/’)
def hello():
return ‘Hello World!’
@app.route(‘/rule/<id>/’)
def hello(id):
return ‘Hello%s’ % id
写法
<converter:variable_name>
converter类型
string 接收任何没有斜杠(‘/’)的文件(默认)
int 接收整型
float 接收浮点型
path 接收路径,可接收斜线(’/’)
uuid 只接受uuid字符串,唯一码,一种生成规则
any 可以同时指定多种路径,进行限定
请求方法
默认支持GET,HEAD,OPTIONS, 如果想支持某一请求方式,需要自己手动指定
@app.route(‘/rule/’,methods=[‘GET’,’POST’])
def hello():
return ‘LOL’
methods中指定请求方法
GET
POST
HEAD
PUT
DELETE
url_for
反向解析,根据函数名字,获取反向路径
url_for("蓝图名.函数名")
url_for(‘函数名’,参数名=value)
Request
服务器在接收到客户端的请求后,会自动创建Request对象
由Flask框架创建,Request对象不可修改
属性
url 完整请求地址
base_url 去掉GET参数的URL
host_url 只有主机和端口号的URL
path 路由中的路径
method 请求方法
remote_addr 请求的客户端地址
args GET请求参数
form POST请求参数
files 文件上传
headers 请求头
cookies 请求中的cookie
ImmutableMultiDict: 类似字典的数据结构, 与字典的区别,可以存在相同的键
args和form都是ImmutableMultiDict的对象
ImmutableMultiDict中数据获取方式
dict['uname'] 或 dict.get('uname)
获取指定key对应的所有值
dict.getlist('uname')
1. args
- get请求参数的包装,args是一个ImmutableMultiDict对象,类字典结构对象
- 数据存储也是key-value
- 外层是列表,列表中的元素是元组,元组中左边是key,右边是value
2. form
- 存储结构个args一致
- 默认是接收post参数
- 还可以接收 PUT,PATCH参数
Response
服务器返回给客户端的数据
由程序员创建,返回Response对象
1. 直接返回字符串, 可以返回文本内容,状态码
2. render_template 渲染模板,将模板转换成字符串
3. 通过make_response(data,code)
- data 返回的数据内容
- code 状态码
4. 返回Response对象
重定向
redirect()
url_for(‘函数名’,参数=value)
终止执行, 抛出异常
主动终止 abort(code)
捕获异常
@app.errorhandler(404)
def hello(e):
return ‘LOL’
会话技术
Cookie
客户端端的会话技术
cookie本身由浏览器保存,通过Response将cookie写到浏览器上,下一次访问,浏览器会根据不同的规则携带cookie过来
特点:
- 客户端会话技术,浏览器的会话技术
- 数据全都是存储在客户端中
- 存储使用的键值对结构进行的存储
- 特性
- 支持过期时间
- 默认会自动携带本网站的所有cookie
- 根据域名进行cookie存储
- 不能跨域名
- 不能跨浏览器
- Cookie是通过服务器创建的Response来创建的
设置cookie:
response.set_cookie(key,value[,max_age=None,exprise=None)]
max_age: 整数,指定cookie过期时间
expries: 整数,指定过期时间,可以指定一个具体日期时间
max_age和expries两个选一个指定
获取cookie:
request.cookie.get(key)
删除cookie
response.delete_cookie(key)
session
服务器端会话技术,依赖于cookie
特点:
- 服务端的会话技术
- 所有数据存储在服务器中
- 默认存储在内存中
- django是默认做了数据持久化(存在了数据库中)
- 存储结构也是key-value形势,键值对
- session 是离不开cookie的
常用操作:
设置session
session[‘key’] = ‘value’
获取session
session.get(key,default=None) 根据键获取会话的值
删除session
pop(key) 删除某一值
clear() 清除所有
Flask (一) 简介的更多相关文章
- Flask 框架 简介
一.Flask介绍 Flask是一个基于Werkzeug,Jinja 2 轻量级的web开发框架, 使用Python开发, 上手简单. 二.安装Flask 三.第一个Flask程序 1.编写app.p ...
- Flask框架简介,常用扩展包及两大核心
Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的功能都 ...
- Flask 参数简介
我们都知道学习了Flask的时候它里面的参数是有很多种的参数 都是需要相互进行调用传递的 今天就简要分析一些常见的参数 首先导入Flask之后看 源码 from flask import Flas ...
- Flask框架简介
Flask框架诞生于2010年,是Armin ronacher 用python语言基于Werkzeug工具箱编写的轻量级Web开发框架! Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展. ...
- Python框架 Flask 项目实战教程
本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走.下载源码,运行pip install -r requirements.txt 建立环境python db_ ...
- python flask实现小项目方法
本文目的是为了完成一个项目用到的flask基本知识,例子会逐渐加深.最好对着源码,一步一步走. 下载源码,运行 pip install -r requirements.txt 建立环境 python ...
- flask基础之安装和使用入门(一)
前言 Flask框架作为一个python极简化的web框架,它不像Django那样的重型,非常适合快速开发一些小型的应用.本人用flask开发了几个项目之后,慢慢研究flask底层的一些原理,开始一步 ...
- Flask—01-轻松入门Flask
Flask入门 WEB工作原理 C/S与B/S架构:客户端-服务器,浏览器-服务器 B/S架构工作原理 客户端(浏览器) <=> WEB服务器(nginx) <=> WSGI( ...
- Flask Web开发从入门到放弃(一)
第1章 章节一 01 内容概要 02 内容回顾 03 路飞学城之加入购物车 04 路飞学城之结算 05 路飞学城之立即支付 06 路飞学城之后续计划 07 Flask框架简介和快速使用 08 FLas ...
随机推荐
- 03-树2 List Leaves(25 point(s)) 【Tree】
03-树2 List Leaves(25 point(s)) Given a tree, you are supposed to list all the leaves in the order of ...
- Windows Server 2012 修改桌面图标
在virtualbox 4.2.18中装了个Windows Server 2012 来体验下,结果发现桌面图标都不知道在哪改.在百度文库上找到了解决方法:http://wenku.baidu.com/ ...
- ansible-playbook 打通ssh无秘钥
建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...
- WebApi发送HTML表单数据:文件上传与多部分MIME
5.3 Sending HTML Form Data5.3 发送HTML表单数据(2) 本文引自:http://www.cnblogs.com/r01cn/archive/2012/12/20/282 ...
- MySQL丨5.6版本插入中文显示问号解决方法
解决办法: 1.找到安装目录下的my-default.ini 这个配置文件 2.copy一份粘贴到同目录下 另命名为my.ini 3.在my.ini 配置下加上下面几句代码 并保存 [mysql]de ...
- 最小点覆盖 hdu--1054
点击打开题目链接 最小点覆盖=最大二分匹配的 (单向图) ; 最小点覆盖=最大二分匹配的一半 (双向图) ; 证明 所以我们只需求最大匹配,用 匈牙利算法 求出最大匹配,除以二得到答案 具体算法都已经 ...
- bzoj 3771 Triple —— FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 令多项式的系数是方案数,次数是值: 设 a(x) 为一个物品的多项式,即 a[w[i] ...
- 比利牛斯獒犬 flask web
1. 使用 session.get('name') 直接从会话中读取 name 参数的值.和普通的字典一样,这里使用 get() 获取字典中键对应的值以避免未找到键的异常情况,因为对于不存在的键, g ...
- 关于group_concat函数拼接字符超长的问题
昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...
- JS搜索商品(跟外卖app店内搜索商品一样) ,keyup函数和click函数调用
HTML: input输入框: <input id="sea" type="text"> JS: //点击搜索商品 $('#mys').click( ...