flask基本使用1

flask使用

1.flask介绍

web应用交互

web应用交互

flask优势

“微”, 轻量级web框架, 核心精简, 允许拓展

虚拟环境 (重点)

虚拟环境: 独立的python环境, 可以避免同一个框架的多版本冲突

三个命令:

创建虚拟环境 mkvirtualenv -p python3 env22

退出虚拟环境 deactivate

进入虚拟环境 workon env22

查看所有虚拟环境 workon 双击tab

mac安装虚拟环境: https://www.jianshu.com/p/dc7ec6a303e3

基本使用

3.1 第一个flask程序

安装第三方包

pip install flask==0.10.1
查看当前解释器安装的第三方包
pip freeze
第一个flask应用
from flask import Flask

app = Flask(__name__)    

@app.route('/')
def index():
    return 'index'
    
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080, debug=True)
run方法参数
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080, debug=True)
    # host 绑定ip 万能ip 0.0.0.0 可以接收外网/局域网/本机的访问
    #port 监听端口号
    #debug 是否开启调试模式 作用1,可以在网页中显示python错误  2,更新代码后服务器会自动重启

3.2 路由的基本定义

# 1,methods参数 用于设置路由支持的请求方式,以列表的方式,元素必须大写
@app.route('/',methods=['GET','POST']) # 2,路由必须以路径分隔符 ‘/’ 开头
def index():
    return 'index'
if __name__ == "__main__":
	print(app.url_map)
	# 3,url_map记录了web应用的所有路由规则,(url,支持的请求方式,视图函数标记(函数名))
    app.run(host='0.0.0.0', port=8080, debug=True)

3.3 请求对象

3.3.1 基本数据

print(request.url) # 获取请求对象的url
print(request.method) # 获取请求的对象的请求方式
print(request.headers) # 获取请求头内容(请求头是一个类字典对象)
print(request.headers.get('host')) # 建议使用get 方法获取健值,没有健的时候返回None而不报错

3.3.2 查询字符串 (重点)[类字典对象]

print(request.args.get('username')
print(request.args.get('age')

3.3.3 请求体 (重点)

请求体数据(3种)[可使用postman进行测试]
1,文本
print(request.data)
2,健值对数据(form表单)
# <input  type='text' name='username' value='ls'>
print(request.form.get('username')
3,文件(图片,视频等)
# <input  type='file' name='boy' >
file = request.files.get('boy') # 获取文件内容
file.save('1.jpg')  # 保存文件

3.4 响应

3.4.1 自定义响应对象

@app.route('/')
def index():
	response = set_response('index') # 为响应对象的响应体传参,默认为None
	print('response.headers') # 打印响应头,也可以为其重新赋值
    return response

3.4.2 返回json (重点)[主要是将字典转成json字符串对象]

@app.route('/')
def index():
	dict={
			'name':'ls'
			'age':18
			}
    return jsonify(dict)
    # jsonify将dict转成json字符串并自动将Content-Type设置为application/json
    # 也支持jsonify(name='zs',age=18)
    # 建议使用此方式,不推荐使用json.dump(dict)

3.4.3 重定向

@app.route('/')
def index():
    return 'index'
@app.route('/demo')
def demo():
    return redirect(url_for('index') # 开发经常是redirect 和 url_for 配合使用
    # 也可redirect('/') 直接指向一个url地址

3.4.4 自定义状态码

@app.route('/')
def index():
    return 'index',700 # 设置第二个返回值为状态吗
    # 作用:可以快速排错

4. 异常处理

@app.route('/')
def index():
	a = 1 / 0
	abort(ZeroDivisionError) # 抛出异常(只能抛出http错误)
    return 'index'
@errorhanler(404)
def error_404(e):  # 捕获到异常
    return '页面不存在'
@errorhanler(ZeroDivisionError)
def error_zero(0):
    return '0不能作为除数'

四. 状态保持 (重点)

状态保持: 记录用户访问信息的机制, 如 是否显示过帮助信息, 是否已登录, 搜索记录等

4.1 cookie

特点:

将数据保存在客户端(用户的电脑上), 可以减轻服务器压力

访问网站时, 浏览器会自动将该网站的cookie数据发送给服务器

扫描二维码关注公众号,回复: 5861340 查看本文章

使用场景:

保存一些不太重要的数据

cookie交互过程
在这里插入图片描述

cookie实现过程

@app.route('/detail3')
def detail3():
    req_c = request.cookies.get('i_help') #
    if req_c:

        return '显示漫画'

    response = make_response('显示帮助')  # type:Response
    response.set_cookie('i_help', '1',max_age=86400) # 设置cookie数据
	# max_age设置cookie过期时间,默认为-1(浏览器关闭即失效) 为0(立即失效)正数单位为毫秒
    return response
cookie设置过期时间

max-age:

-1: 默认值, 当浏览器关闭时, cookie会被删除

0 : 立即删除cookie

正数: max-age=5, 表示5秒后cookie数据被删除

细节

一旦保存了cookie, 访问网站的任意路由时, cookie数据都会被浏览器发送

同源策略: cookie数据只会发给对应的网站

前端js也可以读写cookie

4.2 session

特点:

将数据保存在服务端(服务器的数据库中), 安全性更高

使用场景:

保存一些重要/敏感的数据

session交互过程在这里插入图片描述
session实现免密码登陆
from datetime import timedelta

from flask import Flask,request,session,redirect,url_for

app = Flask(__name__)

app.secret_key = 'test'

session.permanent = True

app.permanent_session_lifetime = timedelta(days=7)

@app.route('/',methods=['GET','POST'])
def index():
    username = session.get("name")
    print(username)
    if username:
        return '欢迎回来%s'%username
    return '首页'

@app.route('/login.html',methods=['GET','POST'])
def login():
    method = request.method
    if method == 'GET':
        with open('./login.html') as f:
            content = f.read()

        return content

    username = request.form.get('username')
    password = request.form.get('password')
    if username == 'ls' and password == '111':
        session["name"] = username
        # print(session.get("name"))
        return redirect(url_for('index'))
    else:
        return '登陆失败'
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

2. Session细节

生成随机字符串 base64.b64encode(os.urandom(48))

设置session的过期时间

# session.permanent 默认为False,如果设置为True,则默认时间为31天
session.permanent = True
app.permanent_session_lifetime = timedelta(days=7)
# 也可以设置hours = 2

删除session

session.pop('name',None) # 设置默认值None,即使健不存在也不报错

flask中默认的session存储机制没有使用传统的session存储机制(数据保存到服务端的数据库中), 而是将session数据加密后保存到了cookie中

猜你喜欢

转载自blog.csdn.net/weixin_43751803/article/details/86490935