一、flask介绍

  flask诞生于2010年,是Armin ronacher用python语言基于Werkzeug工具箱编写的轻量级web开发框架。flask本身相当于一个内核,其他所有的功能都需要扩展。其WSGI工具箱采用Werkzeug(路由模块),模板引擎则使用jinja2,这两个是flask框架的核心。

  官网:http://flask.pocoo.org/

  官网文档:http://docs.jinkan.org/docs/flask/

  常用的扩展包:

- Flask-SQLalchemy:操作数据库,ORM;
- Flask-script:插入脚本;
- Flask-migrate:管理迁移数据库;
- Flask-Session:Session存储方式指定;
- Flask-WTF:表单;
- Flask-Mail:邮件;
- Flask-Bable:提供国际化和本地化支持,翻译;
- Flask-Login:认证用户状态;
- Flask-OpenID:认证;
- Flask-RESTful:开发REST API的工具;
- Flask JSON-RPC: 开发rpc远程服务[过程]调用
- Flask-Bootstrap:集成前端Twitter Bootstrap框架
- Flask-Moment:本地化日期和时间
- Flask-Admin:简单而可扩展的管理接口的框架

  二、安装Flask

  1,配置虚拟环境

  在cmd中输入:mkvirtualenv flask_demo,这样就为flask创建了一个名叫flask_demo的虚拟环境。

  2,在虚拟环境中安装flask模块

  在flask_demo的虚拟环境下,输入:pip install flask==0.12.4

  3,把pycharm环境成flask_demo环境

  在pycharm中,找到:File--Settings中把环境换成flask_demo,之前我们将虚拟环境的有说过具体步骤。

  三、构建一个简单的flask项目

  新建一个py文件,如flask01.py

from flask import Flask, request

app = Flask(__name__)
Flask的参数:
"""
import_name Flask程序所在的包(模块),传 __name__ 就可以
其可以决定 Flask 在访问静态文件时查找的路径
static_path 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
static_url_path 静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder 静态文件存储的文件夹,可以不传,默认为 static
template_folder 模板文件存储的文件夹,可以不传,默认为 templates
""" class Config(object):
DEBUG = True
app.config.from_object( Config )

#路由加视图,当访问下面的这个路径时,就会调用下面的的函数,路由是由装饰器的方式绑定在视图上的
@app.route('/')
def index():
return 'Hello World' #这是把项目运行起来
if __name__ == '__main__':
app.run() #不指定的话,默认127.0.0.1:5000
# 还可以指定服务器IP和端口
#app.run(host="0.0.0.0", port=5000, debug = True)

  现在把flask01.py 文件运行起来,我们在浏览器的地址栏输入:127.0.0.1:5000,就会拿到‘hello world’

  于是完成了一次请求和响应,这就是一个简单web应用。

  四、路由的设置

  1,基本定义

# 指定访问路径为 demo1
@app.route('/demo1')
def demo1():
return 'demo1'

  2,路由传值

我们把路由的一部分作为参数传递给视图,叫路由传值,比如说删除,修改的视图,就需要要修改的对象的id,我们就可以通过路由传值的方式解决
# 路由传递参数[没有限定类型]
@app.route('/user/<user_id>')
def user_info(user_id):
return 'hello %s' % user_id # 路由传递参数[限定类型],限定后面的参数必须是int类型
@app.route('/user/<int:user_id>')
def user_info(user_id):
return 'hello %d' % user_id

  3,路由限定请求方式

@app.route('/demo2', methods=['GET', 'POST'])   #只允许get、post请求访问到这个视图
def demo2():
# 直接从请求中取到请求方式并返回
return request.method

  4,转换器

  4.1,在路由传值的时候,可以限定类型,上面我们使用了int类型,这个int就是flask自带的转换器。

  自带转换器:

DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'path': PathConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}

  4.2 自定义转换器

from werkzeug.routing import BaseConverter
# 自定义正则转换器
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 将接受的第1个参数当作匹配规则进行保存
self.regex = args[0]
# 将自定义转换器添加到转换器字典中,并指定转换器使用时名字为: re
app.url_map.converters['re'] = RegexConverter
@app.route('/user/<re("[0-9]{3}"):user_id>')
def user_info(user_id):
return "user_id 为 %s" % user_id

  五、请求request对象

  1,request对象的属性

from flask import request

request对象的属性:
data:记录请求的数据,并转换为字符串
form:记录请求中的表单数据,数据类型为MultiDict
args:记录请求中的查询参数,数据类型为MultiDict
cookies:记录请求中的cookie信息,数据类型为Dict
headers:记录请求中的请求头
method:记录请求使用的HTTP方法
url:记录请求的URL地址stringfiles记录请求上传的文件

  2,获取请求体中的查询字符串

"""http://127.0.0.1/?username=xiaoming&lve=1&lve=2&lve=3"""
@app.route("/")
def index():
username = request.args.get("username") # 获取单个查询字符串参数
params = request.args.to_dict() # 获取所有查询字符串参数, 获取请求地址中的查询字符串并转换为字典格式
print(params) love = request.args.getlist("lve") # 如果一个参数有多个值的情况,可以通过getlist获取
print(love)

  六、响应

flask默认支持2种响应方式:

数据响应: 默认响应html文本,也可以返回 JSON格式

重定向: redirect,url_for重定向到自身的视图

响应的时候,flask也支持自定义http响应状态码

  1,数据响应

  1.1 返回HTML文本

@app.route("/")
def index():
# [默认支持]响应html文本
return "<img src='http://flask.pocoo.org/static/logo.png'>"

  1.2 返回json数据

from flask import Flask, request, jsonify

@app.route("/")
def index():
# 也可以响应json格式代码
data = [
{"id":1,"username":"liulaoshi","age":18},
{"id":2,"username":"liulaoshi","age":17},
{"id":3,"username":"liulaoshi","age":16},
{"id":4,"username":"liulaoshi","age":15},
]
return jsonify(data)

  2,重定向

  2.1 redirect

# 页面跳转响应
@app.route("/user")
def user():
# 页面跳转 redirect函数就是response对象的页面跳转的封装
# Location: http://www.baidu.com
return redirect("http://www.baidu.com")

  2.2 url_for

# 内容响应
@app.route("/")
def index():
# [默认支持]响应html文本
# return "<img src='http://flask.pocoo.org/static/logo.png'>" # 也可以响应json格式代码
data = [
{"id":1,"username":"liulaoshi","age":18},
{"id":2,"username":"liulaoshi","age":17},
{"id":3,"username":"liulaoshi","age":16},
{"id":4,"username":"liulaoshi","age":15},
]
return jsonify(data) #使用url_for可以实现视图方法之间的内部跳转
# url_for("视图方法名")
@app.route("/login")
def login():
return redirect( url_for("index") )

  2.2 url_for带参数

# 路由传递参数
@app.route('/user/<user_id>')
def user_info(user_id):
return 'hello %d' % user_id # 重定向
@app.route('/demo4')
def demo4():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for('user_info', user_id=100))

  3,自定义状态码

@app.route('/demo4')
def demo4():
return '状态码为 666', 400

  七、cookie与session

  1,cookie

  1.1 设置cookie

from flask imoprt Flask,make_response
@app.route('/set_cookie')
def set_cookie():
resp = make_response('this is to set cookie')
resp.set_cookie('username', 'xiaoming', max_age=3600)
return resp

  1.2 获取cookie

from flask import Flask,request
@app.route('/get_cookie')
def resp_cookie():
resp = request.cookies.get('username')
return resp

  2,session

  2.1 设置session

@app.route('/set_session')
def set_session():
session['username'] = 'xiaoming'
return 'ok!'

  2.2 获取session

@app.route('/get_session')
def get_session():
return session.get('username')

Flask入门第一天的更多相关文章

  1. flask入门第一篇

    一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...

  2. Flask入门笔记(一)

    一.程序的基本结构 1.1 最简单的Flask程序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #coding=utf-8 # 初始化 from flask import Fla ...

  3. Flask入门和快速上手

    目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...

  4. Flask入门系列(转载)

    一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...

  5. Django入门第一步:构建一个简单的Django项目

    Django入门第一步:构建一个简单的Django项目 1.简介 Django是一个功能完备的Python Web框架,可用于构建复杂的Web应用程序.在本文中,将通过示例跳入并学习Django.您将 ...

  6. 超实用的Flask入门基础教程,新手必备!

    Flask入门基础教程 Flask简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,开发人员分工合 ...

  7. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  8. Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter

    前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...

  9. Asp.Net Web API 2(入门)第一课

    Asp.Net Web API 2(入门)第一课   前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎 ...

随机推荐

  1. [swarthmore cs75] Compiler 6 – Fer-de-lance

    课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第8次大作业. First-class function: It treats function ...

  2. navicat连接mysql出现2059错误

    最近在学习django的时候需要用到数据库,于是便下载了navicat准备和mysql配套使用,但是在连接的时候确出现了如下问题: 网上查询过后,发现这个错误出现的原因是在mysql8之前的版本中加密 ...

  3. Vim常用的命令

    Noted:均在命令模式下进行的 移动: j---->向下 k---->向上 l---->向右 h---->向左 保存: w---->保存 退出: q---->退出 ...

  4. python3安装scrapy--记录

    1.pip install wheel 2.url=http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 搜索 下载对应的twiset和scrapy版本到本地 ...

  5. day_3各种数据类型与各种运算符

    首先我们复习一下昨天的内容 1:语言的分类: --有三种 机器语言,汇编语言,高级语言 运行的效率是机器语言最高  开发效率 是高级语言最高 2:计算机由五大部分组成:控制器+运算器+存储器+inpu ...

  6. 1.1.5 PROB Friday the Thirteenth

    Friday the Thirteenth Is Friday the 13th really an unusual event? That is, does the 13th of the mont ...

  7. 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽

    一.软件与硬件平台 软件平台: 操作系统:Windows 7 64-bit 开发套件:ISE14.7 硬件平台: FPGA型号:XC6SLX45-CSG324 QSPI Flash型号:W25Q128 ...

  8. python jieba库的基本使用

    第一步:先安装jieba库 输入命令:pip install jieba jieba库常用函数: jieba库分词的三种模式: 1.精准模式:把文本精准地分开,不存在冗余 2.全模式:把文中所有可能的 ...

  9. Aseprite+Cocos:打包像素画图,导入到cocos里并动起来

    前言:Aseprite入门教程            Aseprite入门:第一个gif动图 1.制作像素画: 按照上一次的小球跳动制作过程,先制作一个像素画动画: 若是导出gif动态图,效果如下: ...

  10. iReport 5.6.0 安装包下载&安装

    iReport 5.6.0 下载 方式有两种: 1.在官网社区上下载,下载地址:https://community.jaspersoft.com/project/ireport-designer/re ...