Flask - 视图函数views的操作

一、视图-路由

路由对应视图函数,并且可以接受参数。

参数类型

    路劲参数

    位置参数

关键字参数

请求参数

     get 参数在路劲中?之后

     post 参数在请求体中

参数语法

     converter:var_name (参数类型:参数名)

参数类型comverter

     string 字符串 接收的时侯也是string,匹配到 / 的时候是匹配结束

         #带参数,默认是string

         @blue.route('/getname/')

          def getname(username):

          print(type(username))

          return '你的名字是:%s' % username

      path 路径 接收的时侯也是string,而 / 只会当字符串中的一个字符处理

# 带参数path

@blue.route('/getpath/')

def getpath(where):

return '你在哪?%s' %where

int 整数行 接收的时侯也是int,匹配到 / 的数字

# 带参数 整形

@blue.route('/getage/')

def getage(age):

return '我的年龄是: %d' % age

any 多个中意义一个 指的是any 中提供的任意一个,类似于SQL查询中的 in

# 带参数any[数据库in] 多个选一个

@blue.route('/getoption/')

def getoption(op):

return '你的选择的是:%s' % op

uuid 格式

import uuid

#获取uuid

@blue.route('/getuuid/')

def get_uuid():

return str(uuid.uuid4())

#  带参数uuid

@blue.route('/getuuid/')

def getuuid(uu):

return '你的uu %s' %uu

float 格式

# 带浮点型参数

@blue.reute('/getscore/')

def getscore(score):

return '你的成绩 %f' % score

注意:默认是string类型

路由参数名和视图函数名必须一致 !!

请求方式

默认支持GET,HEAD,OPTIONS

如果想支持某一请求方式,需要自己手动指定

@blue.route('/requesttest/',mothods=['POST','GET','PUT'])

反向解析

语法

url_for()

url_for('蓝图名.函数名')

例如

#反向解析

@blue.route('/gethello/')

# url_for('蓝图名.函数名')

def gethello():

p=url_for('blueflask.index')

return p

反向解析即是获取对应的路劲

二、视图 - Request 请求

服务器在接收到客户端请求后,会自动创建Request对象,由Flask自动创建,Requestt对象不可修改。

request.method 请求方式

request.path 路由中的路径

request.args get 请求参数的包装,args是一个ImmutableMultiDict对象,类字典结构对象 数据存储也是key-value 外层是大列表,列表中的元素是元组,元组中左边是key,右边是value

request.form

存储结构和args一致

默认是接受post参数

hai可以接收PUT,PATCH参数

re'quest.url 完整请求地址

request.base_url 去掉GET参数的URL

request.remove_addr 请求客户端地址

request.file 上传文件

request.headers 请求头

request.cookie 请求中的cookie

ImmutableMultiDict类型

ImmutableMultiDict类似字典的数据结构 与字典的区别,可以存在相同的键

args、form、files都是ImmutableMultiDict的对象

ImmutableMultiDict数据获取方式

dict['uname']

dict.get('uname') # 推荐(在没有数据为空)

dict.getlist('uname') # 获取指定key对应的所有值

例如

@blue.route('/requesttest/',methods=['GET','POST'])

def requesttest():

#请求方式

print(request.method)

#请求路径

print(request.path)

#请求参数(get)类似于字典

print(request.args)

# print(request.args['name'])

print(request.args.get('sex')) # 取值

#请求参数(post)# 类似于字典

print(request.form)

print(request.args.get('name'))

#客户地址

print(request.remote_addr)

#请求头

print(request.headers)

# cookie

print(request.cookies)

#文件上传

print(request.files)

return '请求测试'

request、session 是内置对象(所有路由函数中都有)!

三、视图 - Response响应

服务器返回给客户端的数据

Response创建方式

直接返回字符串

render_template 渲染模板,将模板转换成字符串

make_response 创建一个相应,是一个真正的Response

Response()创建

redirect

重定向

    返回的也是Response

反向解析

url_for('蓝图名.函数名')

endpoint

app上直接使用函数名

blueprint 蓝图名.函数名

例如

返回字符串

直接写,将内容传递过去

@blue.route('/response/')

def get_response():

return '带你装逼带你飞,带你走进垃圾堆!',403

返回创建response对象

@blue.route('/testresponse/')

def testresponse():

#创建response对象

respon = make_response('睡觉的醒醒!')

print(respon)

print(type(respon))

return respon

返回重定向

@blue.route('/redirect/')

def make_redir():

# 反向解析

return redirect(url_for('first.make_resp'))

返回json数据

resp = make_response('{'name':'disen','age':18}',200)

resp.headers['Content-Type'] = 'application/json'

return resp

return jsonify({'name':'disen','phone':17788818818})

返回配置

返回内容

直接写,将内容传递过去

@blue.route('/response/')

def get_response():

return '一神带四眼,一个打九个,就这么六',403

返回状态码

字符串形式直接将状态码添加到return的第二个参数

如果make形式,直接添加到meke的第二个参数上

# response 响应

@blue.route('/makeresponse/')

def make_resp():

resp = make_response('

社会我胖哥,人狠,话不多!!

',300)

returen resp

返回重定向

redirect 重定向 302

url_for 反向解析

@blue.route('/redirect/')

def make_redir():

# 固定

# return redirect('/makeresponse/')

#反向解析

return redirect(url_for('blue.make_resp'))

抛出异常,终止程序执行

abort 状态码

@blue.route('/makeabort/')

def make_abort():

# 抛出异常(4xx,5xx)

abort(404)

return '发生了什么?'

捕获异常

可以根据状态或 Exception进行捕获

函数中要包含一个参数,参数用来接收异常信息

#捕获404异常

@blue.errorhandler(404)

def hanfler404(exception):

return '

这逼是404!!,锤它。

'

四、视图 - 会话技术

会话技术都是来解决HTTP请求在网络开发中短链接的问题,HTTP是无状态的。

Cookie

客户端会话技术,浏览器的会话技术

数据全是存在客户端中

Cookie是通过服务器创建的Responsse来创建的

cookie特性

支持过期时间

默认会自动携带本网站的所有cookie

根据域名进行cookie存储

不能跨域

不能跨浏览器

设置cookie

response = redirect(url_for('blue.index'))

resp.set_cookie('username',username)

获取cookie

username = request.cookie.get('username','游客')

删除cookie

resp = redirect(url_for('blue.user_index'))

resp.delete_cookie()

备注:

# 模板转为字符串

tempstr = render_template('about.html',username= uu)

respon = make_response(tempstr)

return respon

cookie交互流程

Session

服务端的会话技术

所有数据存储在服务器中

默认存储在内存中

Django默认做了数据持久化(存在了数据库中)

存储结构也是key-value形式,键值对(其实就是字典)

session 是离不开cookie的

设置session

session['username'] = username

获取session

username= session.get('username','游客')

删除session

#方式一:session是存在cookie中的

resp.delete_cookie('session')

# 方式二:直接删除session中对应数据

session.pop('username')

session 交互流程

注意:要使用session还需要密匙种子SECRET_KEY,在app初始化添加进去既可以(app.config[SECRT_KEY] = '123WER1245erwrwe&*%W34@##*&@!)

Token

手动实现的session

如果在web开发中没有cookie,那么token也是不能使用的

脱离web前端,Token是可以使用的

传输给客户端,客户端保存

在请求的时候,将token值再传输回来

五、session -- 持久化保存

flask 中这些插件中几乎并没有干扰到之前的任何逻辑,使用起来非常的方便,就类似于中间件。

flask中session默认存储在内存中;

django中做了持久化,存储在数据库(可以修改到redis中);

flask中没有对默认session进行任何处理;

flask-session 可以实现session的数据持久化;

redis(缓存在磁盘上的时候,管理磁盘文件使用lru, 最近最少使用);

flask-session 安装

pip install flask-session

官方文档:https://pythonhosted.org/Flask-Session/

官方文档:http://flask.pocoo.org/snippets/category/sessions/

flask-session 的配置(初始化完成后,使用和之前session使用)

初始化 flask-session (在__init__.py中)

from flask-session import Session

app.config['SECRET_KEY'] = '135Wwei@o*&^dfsfasd78#*' # 密匙

app.config['SESSION_TY[E'] = 'redis' # 配置数据库

session = Session() # 实例化session对象

session.init_app(app) # session 对象初始化

# 简化操作:session =Session(app)

redis连接问题(需要启动)

redis-sever

redis查看值

#进入redis

redis-cli

#查看所有

keys *

# 获取对应的值

get xxx(key)

#获取时间(session 的生命周期,默认为31)

ttl xxx(key)

# 删除对应的值

del xxx(key)

#删除当前所有的

flushdb

session其他设置(flask-session同样适用)

PERMANENT_SESSION_LIFETIME 设置超时时间

app.config[PERMANENT_SESSION_LIFETIME] = 60

SESSION_COOKIE_NAME 设置会话cookie的名称

app.config['SESSION_COOKIE_NAME'] = 'falsk'

如果没有安装redis-server时启动启动不了的。安装操作:sudo apt insatll redis

官方文档:http://www.redis.net.cn/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,159评论 22 257
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • Flask是使用python语言编写的一个轻量级的web框架。 1. 安装 pip install flask它会...
    依旧丶森阅读 254评论 0 0
  • 1. Flask概述 Flask是使用python语言编写的一个轻量级的web框架内部WSGI实现采用Werkz...
    一只小釆鸟阅读 746评论 0 3
  • 为什么有些人,大脑总是反应很慢?或者学习短时间后,就容易大脑疲劳,没法集中? 此篇文章,就是以我的亲身经历来告诉你...
    汤世海_体系学习法阅读 1,327评论 1 26