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

本文深入探讨了Flask框架的高级应用技巧,包括使用Flask插件进行数据库迁移、运行服务器,PyCharm下的DEBUG调试配置,详解Flask与Django的request对象差异,request获取图片方法,COOKIE和session的运用及区别,以及装饰器的使用和顺序解析。

一、对于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.METArequest.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”。





<think>我们使用Python的Flask框架来创建一个简单的Web项目,演示如何设置Cookie、获取Cookie以及操作Session。 步骤: 1. 安装Flask:`pip install Flask` 2. 创建一个Flask应用,设置路由。 3. 设置Cookie使用`make_response``set_cookie`方法。 4. 获取Cookie:通过`request.cookies`对象。 5. 使用Session:需要设置一个密钥,然后通过`session`对象来设置获取session。 注意:在浏览器访问时,浏览器会自动将Cookie发送到服务器,所以我们可以验证。 我们将创建以下路由: - /set_cookie: 设置一个名为'user'的Cookie - /get_cookie: 获取名为'user'的Cookie - /set_session: 设置一个session - /get_session: 获取session 同时,我们也会在首页('/')显示一个简单的页面,包含链接到这些路由的链接。 由于问题要求设置Cookie信息并使用浏览器验证,我们将在代码中设置Cookie,然后通过浏览器访问/get_cookie来验证。 另外,关于SessionFlasksession是基于Cookie实现的,但数据是签名的(使用密钥加密)。 代码如下:</think>### 如何设置 Cookie 在 Web 开发中,可通过以下方式设置 Cookie(以 Python Flask 框架为例): ```python from flask import Flask, make_response app = Flask(__name__) @app.route('/set_cookie') def set_cookie(): # 创建响应对象 resp = make_response("Cookie 设置成功!") # 设置 Cookie(键值对 + 可选参数) resp.set_cookie( 'user_token', # Cookie 名称 'abc123xyz', # Cookie 值 max_age=3600, # 有效期(秒) secure=True, # 仅 HTTPS 传输 httponly=True, # 禁止 JavaScript 访问 samesite='Lax' # 跨站请求限制 ) return resp if __name__ == '__main__': app.run(ssl_context='adhoc') # 启用 HTTPS ``` #### 关键参数说明: - **max_age**:Cookie 有效期(秒) - **expires**:过期时间(datetime 对象) - **domain**:生效域名(默认当前域名) - **path**:生效路径(默认为 `/`) - **secure**:仅通过 HTTPS 传输 - **httponly**:阻止 JavaScript 访问 - **samesite**:`'Strict'`/`'Lax'`/`'None'` 跨站策略 #### 浏览器验证步骤: 1. 访问 `/set_cookie` 路由设置 Cookie 2. 打开开发者工具(F12)→ Application → Cookies 3. 查看是否包含 `user_token=abc123xyz` 条目 4. 后续请求的请求头将自动包含 `Cookie: user_token=abc123xyz` #### 抓取 Cookie/Session: ```python from flask import request, session @app.route('/get_data') def get_data(): # 获取请求中的 Cookie user_cookie = request.cookies.get('user_token') # 操作 Session (需配置 SECRET_KEY) session['user'] = 'admin' session_data = session.get('user') return f"Cookie: {user_cookie}, Session: {session_data}" ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值