flask 01

版权声明:转载请注明出处 https://blog.csdn.net/qq_42806416/article/details/83539486

python

MVT

M: 模型 负责与数据库进行交互

V:视图(视图函数)负责业务逻辑的处理

T:模板 负责展示

MVC:

M: 模型 负责与数据库进行交互

V:视图(模板 负责展示)

C:控制器 (视图(视图函数)负责业务逻辑的处理)

WEB网站架构:

  1. B/S

    浏览器->服务器

  2. C/S

    客户端->服务器

一、Flask框架

简介:

flask是一个非常小的pythonweb框架 被称之为微型框架 只有一个强健的核心 所有功能都要依赖于第三方扩展库(要安装很多第三方扩展库)

安装:

pip3 install flask

完整运行代码

from flask import Flask #导入flask类

app = Flask(__name__) #类的实例化

#添加路由
#访问地址 http://127.0.0.1:5000/
#访问地址 http://127.0.0.1:5000
@app.route('/')
def index(): #视图函数
    return 'Hello Flask!' #响应内容


if __name__ == '__main__': #主程序运行falsk
    app.run()

访问地址:

http://127.0.0.1:5000/

run参数(不需要记 要知道)

参数 说明
host 主机 默认127.0.0.1 0.0.0.0
port 端口号 默认 5000
debug 调试模式 默认False 开启True
threaded 开启多线程(本地没意义的)

实例:

app.run(host="0.0.0.0",port=5001,debug=True,threaded=True)

开发:

app.run(debug=True)

二、视图函数

(1) 无参路由

@app.route('/')
def index():
    return 'index'

(2) 带一个参数的路由地址

@app.route('/arg/<argname>/')
def arg(argname):
    return '参数argname的值为{}'.format(argname)

(3) 一个参数并限制参数类型

#限制参数类型
#参数默认类型都为字符串
# @app.route('/arg/<age>/')
# @app.route('/arg/<int:age>/') #限制参数类型为int类型
# @app.route('/arg/<float:age>/') #限制参数类型为float类型
# @app.route('/arg/<path:age>/') #限制参数类型为字符串类型 /不再做为分隔符 而是参数值的一部分
@app.route('/arg/<string:age>/') #默认就为字符串
def arg(age):
    print(type(age))
    return '带一个参数的路由地址{}'.format(age)

(4) 传递多个参数

@app.route('/args/<arg1>/<arg2>/')
@app.route('/args/<arg1>_<arg2>/')
def args(arg1,arg2):
    return '参数1的值为{} 参数2的值为{}'.format(arg1,arg2)

(5) 参数可有可无的视图函数

#可有可无参数的视图
@app.route('/arg1/<string:age>/') #默认就为字符串
@app.route('/arg2/') #默认就为字符串
def arg(age='default'):
    print(type(age))
    return '带一个参数的路由地址{}'.format(age)

注意:

  1. 路由地址结尾的/ 建议都加上 如果在定义的时候没有/作为结尾 则访问的时候路由地址也不能有/ 否则404
  2. 如果定义的时候 有/作为结尾 但是访问的时候没有/ 则框架会自动301重定向 来帮你添加/
  3. 路由地址结尾的/如果存在 则访问有没有/都可以 如果定义的时候 没有/则访问不能存在/

三、重定向 redirect

  1. redirect()
  2. url_for()

导入

from flask import redirect,url_for

实例

from flask import url_for,redirect
#重定向
@app.route('/testredirect/')
def testredirect():
    # return redirect('值为路由地址')
    # return redirect('/') #去首页
    # return redirect('/arg1/18/') #重定向到一个参数的视图函数
    # return redirect('/args/zhangsan/18/') #重定向到多个参数的视图函数
    # return url_for('index') #通过视图函数名称反向解析路由地址  /
    # return url_for('arg',age=18) #通过视图函数名称反向解析路由地址  /arg1/18/
    # return url_for('args',arg1='zhangsan',arg2=18) #通过视图函数名称反向解析路由地址  /args/zhangsan/18/
#     组合使用
#     return redirect(url_for('index'))
    return redirect(url_for('arg',age=18))

四、终止代码执行 abort

概述:

类似 python中的raise 上方代码正常执行 下面代码不再执行

区别: raise 抛出错误名称 abort 参数为http标准状态库中的状态码 抛出对应的信息

导入

from flask import abort

@app.route('/')
def index():
    # abort(404)
    # abort(500)
    return 'index'
    # pass

#捕获状态码
@app.errorhandler(500)
def server_error(err):
    return '错误信息{}'.format(err)

#捕获状态码
@app.errorhandler(404)
def not_found(err):
    return '错误信息{}'.format(err)

五、请求 request

导入

from flask import request

作用:

获取请求者携带着的请求数据

概述:

flask框架 在接收到用户的请求以后 会自动创建出 请求对象 request 在使用的时候 只需要导入即可

请求的属性

  1. url 完整的url地址

  2. base_url 去除get的url

  3. host_url 只有主机和端口的url

  4. host 只有主机和端口

  5. path 获取请求的路由地址

  6. method 获取请求方式(大写)

  7. remote_addr 客户端请求ip地址

  8. args 获取get传参 建议使用get方法来获取 如果key不存在则返回 None(不报错)

    getlist() 以列表形式获取具有相同key的get传参

  9. form 获取post传参

  10. files 获取文件上传

  11. headers 获取所有的请求头信息

  12. cookies 获取cookie值

  13. json 获取传递过来的json数据

实例

#http://127.0.0.1:5000/request/?name=zhangsan&name=lisi&age=18/#abc
@app.route('/request/')
def Request():
    print(request.url) #获取完整请求url
    print(request.base_url) #去掉get传参的url
    print(request.host_url) #只有主机和端口的url
    print(request.host) #只有主机和端口
    print(request.path) #返回路由地址
    print(request.method) #请求的方法
    print(request.remote_addr) #客户端请求ip地址
    print(request.args) #获取get传参
    print(request.args.get('name')) #获取get传参
    print(request.args['name']) #获取get传参
    print(request.args.getlist('name')) #获取get传参
    print(request.headers) #获取请求头信息
    return 'request'

六、路由响应 response

导入:

from flask import make_response

实例

from flask import make_response
#响应
@app.route('/response/')
def response():
    # return '响应',404
    res = make_response('响应',404)
    return res

会话控制 cookie和session

概述:

原因是http协议为无状态协议 每次请求都是一个新的会话 为了维护一个用户的连续的请求和状态的维持 所以使用cookie和session

七、cookie

cookie将数据存储在客户端(也就是浏览器中) 明文存储 不安全 很多浏览器都对cookie个数的存储存在限制 一般一个站点最多存储20个cookie

(1) 设置cookie

Response.set_cookie(key,value,max_age=None,expires=None,path=’/’)

max_age: 值为秒 活…秒

**expires:**值为一个截至的时间戳 活到某个时间戳就终止

**path:**cookie值的有效路径

实例

#设置cookie
@app.route('/set_cookie/')
def set_cookie():
    res = make_response('设置cookie')
    #设置cookie  默认存活时间为 浏览会话结束
    res.set_cookie('message','有比女朋友漏气更苦比的事吗? 男朋友漏电了')
    return res

(2) 设置cookie并设置过期时间

实例

#设置cookie并设置过期时间
@app.route('/set_cookie_lifttime/')
def set_cookie_lifttime():
    res = make_response('设置cookie并设置过期时间')
    # res.set_cookie('message','拼搏到无能为力 坚持到感动自己',max_age=30)
    import time
    leftTime = time.time()+30 #30秒以后的时间戳
    res.set_cookie('message','拼搏到无能为力 坚持到感动自己',expires=leftTime)
    return res

(3) 获取cookie

实例

#获取cookie
@app.route('/get_cookie/')
def get_cookie():
    print(request.cookies) #打印所有cookie
    value = request.cookies.get('message') #获取cookie
    return '获取cookie的值为--{}'.format(value)

(4) 删除cookie

实例

#删除cookie
@app.route('/delete_cookie/')
def delete_cookie():
    res = make_response('删除cookie')
    # res.delete_cookie('message') #删除cookie
    res.set_cookie('message','',max_age=0) #重新设置 刚活就死掉了
    return res

八、session

session将数据存储在服务器端 基于cookie cookie来存储session值的唯一id 称之为sessionid 安全性高于cookie 如果服务器端的session存储过高 会占用服务器的性能啊 将重要的数据存储在服务器端 不重要的存储在客户端

注意:

设置session 需要密钥 secret_key

导入

from flask import session

(1) 设置session

实例

#设置session
@app.route('/set_session/')
def set_session():
    session['key'] = '最牛比的字是什么字?昊'
    return '设置session'

默认: 关闭浏览器就结束

(2) 设置session并设置过期时间

实例

#设置session并设置过期时间
@app.route('/set_session_lefttime/')
def set_session_lefttime():
    from datetime import timedelta #计算时间差值的类
    #开启持久化存储
    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=1) #存活1分钟
    session['key'] = '最牛比的字是什么字?昊'
    return '设置session过期时间'

(3) 获取session

实例

@app.route('/get_session/')
def get_session():
    return session.get('key','default')

(4) 删除session

实例

@app.route('/delete_session/')
def delete_session():
    session.pop('key') #删除某一个key
    session.clear() #清除所有
    return '删除session'

猜你喜欢

转载自blog.csdn.net/qq_42806416/article/details/83539486