chencourage 2019-11-06
1.Flask:
Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature。
为什么要从Flask开始学习web框架?
1.python语言的灵活性给予了Flask同样的特征;
2.无论是用户画像还是产品推荐,python相比其他语言都有极大的优势;
3.Flask轻便,容易上手,试错成本低
mkvirtualenv flask_demo -p python3 安装 pip install flask==0.12.4 # 导入flask程序 from flask import Flask # 初始化flask对象 app = Flask(__name__) # 装饰器模式,新建路由,绑定index视图函数 @app.route("/index") def index(): return "index page" # 判断当前的__name__ 是否是__main__ # __name__ : 如果做为单一模块运行,表示主模块名称:__main__ # 如果做为模块导入,那么就表示当前模块的名字 if __name__ == ‘__main__‘: # 启动app app.run() 运行之后,在浏览器地址栏输入:http://127.0.0.1:5000/index 就可以看到视图函数返回的内容 Flask数据库基本操作 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提交会话。 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。 最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。 在视图函数中定义模型类 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) #设置连接数据库的URL app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘mysql://root::3306/test‘ app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = True #查询时会显示原始SQL语句 app.config[‘SQLALCHEMY_ECHO‘] = True db = SQLAlchemy(app) class Role(db.Model): # 定义表名 __tablename__ = ‘roles‘ # 定义列对象 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) us = db.relationship(‘User‘, backref=‘role‘) #repr()方法显示一个可读字符串 def __repr__(self): return ‘Role:%s‘% self.name class User(db.Model): __tablename__ = ‘users‘ id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True, index=True) email = db.Column(db.String(64),unique=True) password = db.Column(db.String(64)) role_id = db.Column(db.Integer, db.ForeignKey(‘roles.id‘)) def __repr__(self): return ‘User:%s‘%self.name if __name__ == ‘__main__‘: app.run(debug=True)
一对多
在一的那一方,建立跟多的那一方的关联属性
class Role(db.Model): ... #关键代码 us = db.relationship(‘User‘, backref=‘role‘, lazy=‘dynamic‘) ... class User(db.Model): ... role_id = db.Column(db.Integer, db.ForeignKey(‘roles.id‘))
多对多
多对多是通过建立中间表实现的。中间表值记录关系和存储关系字段。
这个中间表将互为多对多的关系表的主键设为外键。
这个关系表是直接建立的,不适用于模型类映射
registrations = db.Table(‘registrations‘, db.Column(‘student_id‘, db.Integer, db.ForeignKey(‘students.id‘)), db.Column(‘course_id‘, db.Integer, db.ForeignKey(‘courses.id‘)) ) class Course(db.Model): ... class Student(db.Model): ... classes = db.relationship(‘Course‘,secondary=registrations, backref=‘student‘, lazy=‘dynamic‘)
增删改查
增
user = User(name = "lisi") db.session.add(user) # 将user添加到这个TCP会话当中,这个session就代表这个链接会话
删
user = User.query.get(1) db.session.delete(user) db.session.commit()
改
user = User.query.get(1) user.name = "lisi" db.session.commit()
查
语法: 模型类名.query.过滤器.查询执?行行器?