app.config[‘JSON_AS_ASCII‘] = False #中文转换
@app.route(‘/user/<user>‘)动态路由,通过函数传参
jsonify() 转换成页面能看懂得json字符串
redirct(‘‘) 跳转路由地址
redirct(url_for(函数名)) 跳转函数名
abort(404) 抛出异常
‘{}‘.format(函数) 格式化格式 动态传参
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 Manager
manage = 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 建文件夹migrations
2.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 RotatingFileHandler
from 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 获取文件