flask的Flask-Script和Flask-Migrate和表单验证

本文介绍如何使用Flask-Script扩展简化Flask应用的命令行管理,并演示了如何配置Flask应用连接数据库,执行基本的数据库操作,以及如何通过命令行工具管理这些操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask-Script

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

flask——script

from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, TEXT, FLOAT, ForeignKey, Enum
from sqlalchemy.orm import sessionmaker, relationship, backref
from flasksqlalchemy插件 import app

manage =Manager(app)

@manage.command
def index():
    return 'hello world'


if __name__ == '__main__':
    manage.run()

在cmd虚拟环境运行命令:python manage.py index(文件名的方法def的index)

在这里插入图片描述

option源码

在这里插入图片描述

修改为@manage.option

在这里插入图片描述

python py名 方法def名 加-n 为name命名,加-u为url命名

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

创建manage、config、flask_script文件以管理员形式添加数据

manage文件

在这里插入图片描述

config——链接数据库

from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, TEXT, FLOAT, ForeignKey, Enum
from sqlalchemy.orm import sessionmaker, relationship, backref
# 链接数据库
# 地址 数据库名字 端口 用户名 密码
HOSTNAME = '127.0.0.1'
DATABASE = 'class1'
PORT = '3306'
USERNAME = 'brkalsy'
PASSWORD = 'root123'

DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
# 访问
engin = create_engine(DB_URL)
Base = declarative_base(engin)

app = Flask(__name__)
# 映射数据库
# 是URI,不是URL
SQLALCHEMY_DATABASE_URI= DB_URL
SQLALCHEMY_TRACK_MODIFICATIONS = False

flask_script文件——创建类(表)

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

Flask-Migrate

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

在flask-Migrate库没升级前命令

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

如果互相调用文件不行,需要另外创建一个文件来解耦合

模型models文件

在这里插入图片描述

app文件

在这里插入图片描述

正确做法——创建中间文件放入db

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

flask-migrate运用

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

表单验证

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

引入——用之前所学知识

创建框架

在这里插入图片描述

render_template的html

在这里插入图片描述

框架网页显示

在这里插入图片描述

登录设置

在这里插入图片描述

结果

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

用forms方式表单验证的注册逻辑

forms.py文件

在这里插入图片描述

用这个代替原先代码逻辑

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

结果

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

用forms方式表单验证的登录逻辑——注意用的WTForms是2.2.1版本

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

结果

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

上传文件

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

uploadhtml文件

在这里插入图片描述

结果

在这里插入图片描述

上传文件会报错——因为以post形式发送,之前没有post逻辑

在这里插入图片描述

补充逻辑

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

确保文件上传以安全方法——确保文件命名不是特殊字符——不是过滤

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

对于中文名文件:

在这里插入图片描述

过滤2:表单过滤

写一个表单过滤文件

在这里插入图片描述

导入文件

在这里插入图片描述

代码:

在这里插入图片描述

结果

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

问题:允许的文件后缀名也报错了,也失败——在接受form=Upload(request.form,request.files)这里被拦截需要导入新的包

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

结果:符合的可以上传,不符合的会被拦截

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

cookie&session

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

cookie——用户状态保持,如果仍为到期,不用重新登陆

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

set_cookie:

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

结果

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

替换成一天

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

session

在这里插入图片描述

不安全session不能实现——没有加密

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

加密后:

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

session加密源码

在这里插入图片描述

随机加密——导入os包

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

session持久化保持

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

自己设置持久化时间——导库datetime

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

需求:通过登录页面才获取username

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

删除session——pop后需要clear()

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

上下文——请求上下文进行数据间的隔离

在这里插入图片描述

request的作用——代理

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

获取current_app.name(当前app——app=Flask(name)

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

如果创建一个app2来表示current_app并写在app.route外面:——会报错——需要承上启下

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

解决方法——with

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

g对象——处理临时对象——借助之前写下的session

在这里插入图片描述

导入文件

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

g的使用

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

结果:一样可以获得

在这里插入图片描述

对临时获得的g对象访问

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

注意一开始首页进去没有g对象,只有登录拿到session后才有g对象(临时)

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值