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对象访问