max_age = 3600 设置过期时间 秒
ck = make_response() 生成一个复杂返回存储给浏览器页面ck.set_cookie() 存储到cookie里user = request.cookies.get('user_name') 请求获取cookies中的数据app.secret_key = '1811' 密钥session['user_id'] = id 存储到sessio中user = session.get('user_id') 获取session中的数据*rs = jsonify(msg) 改为utf8的标识,显示中文rs.headers['Conten-Type'] = 'application/json;charset=utf-8'***from flask_script import Managermanage = Manager(app)manage.run() 在黑窗口中跑py文件python 文件名.py runserver *--host ip地址 --port 端口号***render_template(html.html) 指定模板名
app=Flask(__name__,template_folder='../templates') 指定路径位置 py文件必须与templates平级 | 装饰器{% filter () %} 可修改这中间的所有形态 {% endfilter %}{% if %}_{% elif %}_{% else %}_{% endif %} 判断格式,又开始结束{% for %}_{% endfor %} for循环{ { loop.index }} 序号,从1开始 加0从0开始{% extends '父模板名.html' %} 指定子模板继承父
{% block (名) %} {% endblock %} 模板继承部分{% include '父模板名.html' %} 包含就是把网页整体拿过来{% for i in get_flashed_messages() %} 模板中闪现flash() py中闪现<script> alert('{ {变量名}}') </script> 弹框输出from flask_sqlalchemy import SQLAlchemy 导包连接数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@127.0.0.1:3306/book'数据库连接 XXX : //用户名 : 密码: @数据库IP : 端口/库名app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True动态追踪修改设置,如未设置只会提醒警告app.config['SQLALCHEMY_ECHO'] = True 查询时显示原始SQL语句db = SQLAlchemy(app) db用来操作数据库,并把自定义模型类关联class Author(db.Model): db.Model 调用db__tablename__ = 'author' 修改表名id = db.Column(db.Integer) 建字段db.create_all() 创建数据库表db.drop_all() 删除数据库表books = db.relationship('Books类名',backref = '自表名author',lazy = 'dynamic')relationship 建立关系 backref=''反向查找 lazy = 'dynamic 动态加载def __str__(self): return str(self.id) + '|' + self.name 转换成字符串book_list = db.session.execute('select * from books') 支持原生sql语句 循环遍历a1 = Author.query.all() 查看表中所有数据 query.all() query 相当于 select 循环遍历a2 = Author.query.filter(Author.name == '李四') 条件查询 filter 相当于 where 语句 循环遍历.first() 加在最后,返回查询第一条from sqlalchemy import and_,not_,or_ 导包 或 与 非a4 = Author.query.filter(and_(Author.name == '李四',Author.id == 1)).first 与 and_a5 = Author.query.filter(or_(Author.name == '李四',Author.id ==1)) 或 or_ 循环遍历a6 = Author.query.filter(not_(Author.name == '李四')) 非 not_ 循环遍历a7 = Author.query.filter(Author.name == '张三').first() for i in a7.books:一对多查询 正向查找,根据作者找书籍b1 = Books.query.filter(Books.id == 1).first() print(b1.author) 反向查找,根据书籍找作者 对数据库中的数据有改变的语句,都要进行 db.session commit()a8 = Author(name='王五') db.session.add(a8) 添加一条数据a9 = Author() a9.name = '赵六1' db.session.add_all([a9,a10,a11]) 添加一张表 多条数据a12 = Author(name='刘能') b1 = Books(name='乡村爱情1') a12.books = [b1,b2,b3] db.session.add(a12) 一对多添加数据 同时添加作者和书籍a13 = Author.query.filter(Author.name == '刘能').first() a13.name = '赵四' 修改数据a14 = Author.query.filter(Author.name == '赵六1').first() db.session.delete(a14) 删除数据a15 = Author.query.filter(Author.name == '赵四').first() a15.books.delete() 一对多删除{% for message in get_flashed_messages %} 前台显示闪现内容
post 提交方式取值 request.form.get('user')get 提交方式取值 request.args.get('user')from flask_migrate import Migrate,MigrateCommand 数据库迁移导包from flask_script import Manager 黑窗口导包migrate = Migrate(app,db) 1将数据库迁移到黑窗口中 更新数据库表结构manager.add_command('db',MigrateCommand) 2将数据库迁移到黑窗口中 更新数据库表结构数据库迁移操作顺序1.python 文件 db init 建文件夹migrations2.python 文件 db migrate -m"版本名(注释)"3.python 文件 db upgrade 然后观察表结构主表:cascade='all, delete-orphan', passive_deletes=True子表: ondelete='CASCADE' 关联删除<script src="../../static/js/jquery-3.3.1.min.js"></script> 导入jQuery
console.log($('.one').val()) id选择器 val() 获取value值console.log($('#cla').val()) class选择器$('#one').val('123') 控件赋值$('#btn').click(function () { $('#one').val('修改内容') }) 按钮点击事件parseInt() 转换成int类型def to_dict(self): 转换成字典window.location.href='/user/login'; 前台跳转地址的方法colspan="6" 合并单元格 align="right" 靠右显示<style>ul{ list-style:none;消除黑点 }ul li{display:block;变块 margin-right:10px;边距 float:left;靠左}from modules.admin import admin_blue 导入蓝图包
app.register_blueprint(admin_blue,url_prefix='/admin')注册蓝图,指定蓝图admin_blue = Blueprint('admin',__name__) 设置蓝图import logging 导包 日志配置
from logging.handlers import RotatingFileHandlerfrom werkzeug.security import generate_password_hash,check_password_hash 密码加密 (生成)(比较)
上传图片的表单,需要在form中添加: enctype="multipart/form-data" method="post"
from utils.captcha.captcha import captcha 生成验证码图片type='file' 上传文件.lower() 忽略大小写window. js跳转 ######
img = request.files.get('avatar') files 获取文件