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对象(临时)

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

被折叠的 条评论
为什么被折叠?



