flask中request中的一些方法 cookie和session的创建、删除以及使用 上传图片和使用图片 装饰器(多个装饰器顺序) 对于manage.py的补充 项目DEBUG调试的开启

一、对于manage.py的补充


1. 使用flask插件 完成migrate、runserver等方法


① 安装Flask-script


Flask-script 是三方提供的flask项目,交互式插件,可以使用flask-script管理安装项目命令

pip install flask-script

② 在文件中导入Manager,实例化方法


在这里插入图片描述
@manage.command 和@manager.option

脚本管理功能可以通过命令方式启动某个函数,从而对服务器进行管理和维护,并将脚本与系统分开。flask通过flask_script扩展提供脚本管理的功能。使用时只要从该模块中导入Manage类,然后传入当前的Flask应用对象生成一个Manage类对象,调用该对象的run方法后,就可以接收命令行中的选项作为函数名参数调用。作为可以被脚本调用的函数,需要在函数前用修饰器“@manager.command”或“@manager.option”修饰,前者用来修饰无参数的函数,后者可以用来修饰有参数的函数。


二、配置pycharm启动项目DEBUG调试的开启


在这里插入图片描述

  • 老版本开启办法
    在这里插入图片描述
    本机
    在这里插入图片描述
  • 新版本自带 flask server
    在这里插入图片描述

三、flask请求request


通常web服务请求:

  • form表单
  • url get请求
  • ajax
  • 爬虫

1. Django中的request请求一些方法


django中:

request 请求对象 视图中的形参
request.POST 获取post请求参数
request.GET 获取get请求参数
request.COOKIES 获取cookie
request.META request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。
request.body 主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);前端不能使用GET方式提交数据,而是用POST方式进行提交。

2. Flask中的request请求一些方法


要导包

from flask import request
request 作用
request.form 获取post请求的 从表单请求中获取
request.args 获取get请求的 从url中获取
request.cookies 获取cookie
request.files 请求携带的文件 如图像
request.method 请求的方式
request.url 请求的路由
request.headers 请求的头

四、request获取图片的方法


flask中没有ImageField方法,只能用String代替。
此时存在数据库的就是字符串:图片的名字

  • 从request.files中获取图片名字
 photo = request.files.get("photo")
 photo_name = photo.filename
当前文件所在的目录
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
如同Django中用static代替绝对路径
STATIC_PATH = os.path.join(BASE_DIR,"static")
static中图片的路径
photo_path = os.path.join("img",photo_name)
文件路径
path = os.path.join(STATIC_PATH,photo_path)
图片本身保存文件路径
photo.save(path)
保存图片
user.photo = photo_path

在这里插入图片描述
在这里插入图片描述
使用图片
在这里插入图片描述

  • request.files中的属性
    在这里插入图片描述
    在这里插入图片描述
  • 获取除了__的属性
    在这里插入图片描述
    在这里插入图片描述
  • 一些属性的作用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

五、COOKIE 和 session的区别


相同点:都是一种会话机制

不同点:

  • Cookie
    • 优点:成本低,能够解决浏览器访问无状态的问题
    • 缺点:安全性低,cookie 下发到用户,放在用户本地
  • session
    • 优点:解决了cookie安全性的问题,
    • 缺点:成本高,需要放在服务器上面,通常放在数据库中,flask放在内存中

六、Cookie的操作


1. 设置cookie


response = redirect("//")
response.set_cookie("键",值)

在这里插入图片描述


2. 获取cookie


    cookie = request.cookies.get("user_id")
    print (cookie)

3. 删除cookie


@app.route("/logout/",methods=["get","post"])
def logout():
    rep = redirect("/login/")
    rep.delete_cookie("email")
    rep.delete_cookie("user_id")
    return rep

七、session的操作


flask使用session,session默认存在内存中的,需要使用插件才能够将存储在数据库中

django中settings.py 中有secretkey session_id session内容

flask中没有,需要配置

session的使用需要配置

  • 第一种
    在这里插入图片描述
  • 第二种
    在这里插入图片描述

1. 设置session


from flask import session
session["key"] = "value"

2. 获取session


在这里插入图片描述


3. 删除session


  • 两种方法
    在这里插入图片描述

八、装饰器


1. flask中装饰器


flask 中是由装饰器写路由,登录装饰器涉及两个装饰器的使用

  • 装饰器的顺序
    在这里插入图片描述
  • 装饰器返回函数的名字(函数名重复)
    解决办法
    导包:import functools
    在这里插入图片描述

2. 多个装饰器的顺序


在这里插入图片描述
在这里插入图片描述
函数执行顺序由上而下,一开始两个函数都不执行,但每个函数都会分配一个内存块;
直到遇到第一个装饰器,因为下面还有一个装饰器,因此进入第二个装饰器,
一开始index作为一个函数单独在内存中分配一个内存块,第二个装饰器相当于index=loginouter(index),
将index当做参数传入loginouter中的函数,inner中相当于是一个index函数;
因此打印“我是登录验证装饰器”,遇到函数inner没调用不打印,
通过return inner返回传入的参数index即下面的index函数。
然后再走第一个装饰器,打印“我是flask装饰器”,相同的,
将下面的装饰器返回的函数作为一个整体传入flask_url内的函数体,并将函数体返回;
此时走到下面的实例化函数,函数体在flask_url内。因此,打印“url”,
func(*args,**kwargs)函数调用函数体,打印“验证”,此时func()调用index函数,打印“index”。





发布了107 篇原创文章 · 获赞 43 · 访问量 6162

猜你喜欢

转载自blog.csdn.net/langdei/article/details/102575368
今日推荐