Flask—01-轻松入门Flask
Flask入门
WEB工作原理
- C/S与B/S架构:客户端-服务器,浏览器-服务器
- B/S架构工作原理
- 客户端(浏览器) <=> WEB服务器(nginx) <=> WSGI(uWSGI) <=> Python(Flask) <=> 数据库(MySQL)
- 说明:flask自带一个测试的WEB服务器,但是它仅仅适合于测试环境,不能用于生产环境。
MVC与MTV框架
- MVC框架
- M:Model,模型,即数据模型,负责数据的存取。
- V:View,视图,负责数据的展示效果。
- C:Controller,控制器,负责业务逻辑的处理。
- MTV框架
- M:Model,模型,即数据模型,负责数据的存取。
- T:Templates,模板,负责数据的展示效果。
- V:View,视图函数,负责业务逻辑的处理。
- 总结:使用MVC或MTV就是为了解耦,可以提高开发维护的效率。
Flask框架简介
说明:
flask是一个轻量级的web框架,被称为微型框架。只提供了一个高效稳定的核心,其它全部通过扩展来实现。意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩展库。
核心:
- WSGI系统、调试、路由
- 模板引擎(Jinja2,是flask核心开发者人员开发的)
安装:
pip install flask
启动完整代码
完整代码
# 导入类库
from flask import Flask # 创建应用实例
app = Flask(__name__) # 添加视图函数
@app.route('/')
def index():
return 'Hello Flask!' # 启动应用
if __name__ == '__main__':
app.run()
启动参数
参数 说明 debug 是否开启调试模式,默认为False;开启后会有出错调试信息,文件会自动加载。 threaded 是否开启多线程,默认为Flase。 host 指定主机,默认为'127.0.0.1',设置为'0.0.0.0'后可以通过IP进制访问 port 指定端口,默认为5000。 启动示例:app.run(debug=True, threaded=True, host=’0.0.0.0’, port=5555)
flask-script
说明:
简单来说,该库就是flask终端启动的参数解析器;这样就可以不更改代码就能完成不同方式的启动。
安装:
pip install flask-script
使用:
# 导入类库
from flask_script import Manager # 创建对象
manager = Manager(app) # 启动应用
if __name__ == '__main__':
manager.run()
启动参数:
参数 说明 -?,--help 查看帮助 -h,--host 指定主机 -p,--port 主动端口 -d,--debug 开启调试模式 -r,--reload 自动加载 --threaded 开启多线程 --processes 指定多进程数量 启动示例:python manage.py runserver -d -r -h 0.0.0.0 -p 5555
flask使用
视图函数
- 示例:
# 无参路由
@app.route('/')
def index():
return '<h1>Hello Flask!</h1>' # 带参路由,可以传递多个参数
@app.route('/welcome/<name>/<uid>/')
def welcome(name, uid):
return 'Hello {} {}'.format(name, uid) # 指定参数类型,如:str(默认)、int、float、path
@app.route('/user/<int:uid>/')
def user(uid):
return 'Hello {}号'.format(uid) # path类型:类型仍然是str,只是将'/'当做普通字符处理而已
@app.route('/path/<path:p>/')
def path(p):
return p
- 说明:
1.路由末尾的'/'建议都加上,防止出现路由多敲'/'出现的问题
2.若需要路由参数,参数需要放在<>中,对应的视图函数需要同名的参数
3.路由参数可以指定多个,也可以指定类型
4.常用参数类型:str(默认)、int、float、path,使用时放在参数前面,使用':'与参数连接
5.path类型其实是str类型,只是将'/'作为普通字符处理罢了。
请求(request)
from flask import request # 请求,request中存放了所有的HTTP请求信息
@app.route('/request/')
def req():
# 完整的路由地址
# return request.url
# 不包含GET参数的路由地址
# return request.base_url
# 只有协议主机和端口
# return request.host_url
# 只包含装饰器中的路由地址
# return request.path
# 请求方法的类型:GET、POST
# return request.method
# 客户端的IP
# return request.remote_addr
# args:GET参数;form:POST参数;values:GET和POST
# return request.args.get('uid', '默认值')
# headers:所有的请求头信息
return request.headers.get('User-Agent')
响应(response)
from flask import make_response # 响应response
@app.route('/response/')
def response():
# 直接返回字符串
# return 'OK'
# 可以在返回时指定状态码,默认都是200
# return 'page not found', 404
# 先用专门的函数构造一个响应对象,可以指定内容及状态码等
resp = make_response('这是通过函数构造的响应', 404)
# 设置响应头信息
resp.headers['uid'] = 250
return resp
重定向(redirect)
from flask import redirect, url_for # 重定向
@app.route('/old/')
def old():
# return '原来的数据'
# 通过url来重定向新的路由地址,参数是希望重定向的url
# return redirect('/new/')
# 根据视图函数名反向构造路由地址,参数是视图函数名
# return url_for('new')
return redirect(url_for('new')) @app.route('/new/')
def new():
return '新的数据'
反向构造路由(url_for)
# 反向构造路由
@app.route('/urlfor/')
def urlfor():
# 不带参数的路由
# return url_for('new')
# 可以构造带参的路由,多出来的参数以GET形式传递
# return url_for('user', uid=250, name='cuihua')
# 构造完整(带协议主机和端口)路由,可以进行外部跳转
return url_for('user', uid=250, name='cuihua', _external=True)
终止及错误定制
# 终止abort
@app.route('/abort/')
def err():
# 终止代码执行,其实是向系统抛出指定异常
# 系统捕获异常,按照统一的方案进行处理
abort(404)
return '正常' # 定制错误显示
@app.errorhandler(404)
def page_not_found(e):
return '是不是搞错了大哥?'
蓝本使用
说明:
当大量的视图函数存放在一个文件中,很明显是不合适的。最好是根据功能模块进行划分,将相关的功能模块放在同一文件,蓝本就是用来解决这个问题的。
使用:
user.py
# 导入类库
from flask import Blueprint, url_for # 创建对象,可以指定统一的前缀
user = Blueprint('user', __name__, url_prefix='/user') # 添加视图函数
@user.route('/login/')
def login():
# 当反向构造同一蓝本中的路由时,蓝本名可以省略,但是不能省略'.'
return url_for('.register')
return '欢迎登录' @user.route('/register/')
def register():
return '欢迎注册'
manage.py
from user import user
# 注册蓝本,注册时可以再次设置相关参数,而且优先级较高,user:蓝本名,url_prefix:路由
app.register_blueprint(user, url_prefix='/u') @app.route('/urlfor/')
def urlfor():
# 构造蓝本中的路由(蓝本中的'/u')时,参数这样传递:'蓝本名.视图函数名'
return url_for('user.login')
Flask—01-轻松入门Flask的更多相关文章
- Web开发入门教程:Pycharm轻松创建Flask项目
Web开发入门教程:Pycharm轻松创建Flask项目 打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask.Django等等,我们选择生成Fla ...
- Python Flask Web 框架入门
Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...
- 比我的脸还干的gan货——Python Flask Web 框架入门
Flask是一个轻量级的基于Python的web框架. 本文适合有一定HTML.Python.网络基础的同学阅读. 1. 简介 这份文档中的代码使用 Python 3 运行.是的,所以读者需要自己在电 ...
- Flask框架从入门到实战
Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...
- flask 框架快速入门
flask 框架快速入门 搭建一个简易flask项目 首先使用 Pycharm创建flask项目 运行flask项目 1.使用Pycharm搭建flask项目 (如果Pycharm新建项目中未出现该图 ...
- Flask微型框架入门笔记
例程: from flask import Flask app = Flask(__name__) # 新建一个Flask可运行实体(名字参数如果是单独应用可以使用__name__变量,如果是modu ...
- flask轻量级框架入门
# -*- encoding: utf-8 -*- #导入Flask类, 导入重定向,url_for是简易寻址跳转, from flask import Flask,redirect,url_for, ...
- 一篇博客带你入门Flask
一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...
- flask框架基础入门一
首先:flask是一个基于Werkzeug,Jinja2的一个python的微服务框架. 安装flask框架: pip install flask 一个最小的最简单的flask应用: from fla ...
随机推荐
- java版两人聊天程序
server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...
- android框架Java API接口总注释/**@hide*/和internal API
Android有两种类型的API是不能经由SDK访问的 l 第一种是位于com.android.internal包中的API我,位于frameworks/base/core/java/com/andr ...
- oracle 常用操作记录--持续更新...
一.oracle grant 授权语句(转自:https://www.cnblogs.com/yt954437595/p/6488819.html) --select * from dba_users ...
- 为什么C语言会有头文件
前段时间一个刚转到C语言的同事问我,为什么C会多一个头文件,而不是像Java和Python那样所有的代码都在源文件中.我当时回答的是C是静态语言很多东西都是需要事先定义的,所以按照惯例我们是将所有的定 ...
- Canvas知识点汇总
本文主要记录Canvas基础知识汇总. 1.Canvas定义 <canvas> 元素是HTML5中的新元素,通过它可以在网页中绘制出所需的图形.<canvas>标签只是图形的容 ...
- Python基础 数据类型 (字符串、列表、字典、元组、集合、堆、栈、树)
数据类型有整型.布尔.字符串.列表.字典.元组.集合.堆.栈和树. 1.整型: 整型就是数字 数字表示 python2 64位机器,范围-2^63~2^63-1 超出上述范围,python自动转化为l ...
- 使用 Python 设置数据的路径
使用 Python 设置数据的路径 编程语言(如 Python)将反斜线 (\) 用作转义字符.例如,\n 表示换行符,\t 表示制表符.指定路径时,可使用正斜线 (/) 代替反斜线.使用两条反斜线( ...
- git 无法忽略Android Studio 生成的 .idea目录解决办法
在Android Studio中导入了别的人Gradle项目,产生了 .idea文件夹, 然后git 发现了这个变动,修改了 .gitignore不起作用,仍然不能忽略这个文件夹 在项目目录里面 右键 ...
- Hadoop ->> MapReduce编程模型
对于MapReduce模型的实现,有Java等一些语言实现了接口,或者用像Hive/Pig这样的平台来操作.MapReduce由Map函数.Reduce函数和Main函数实现.第一步,源数据文件按默认 ...
- vue v-for(数组遍历)
1.js代码 var box=new Vue({ el:'.box', data:{ msg:['hello','ok','dome'], //定义一个数组 msg2:{a:'ok',b:" ...