文章目录
一、对于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”。