Web框架-Flask框架
什么是Web框架
Web框架就是使开发者能够快速开发Web应用程序的一套功能代码
开发者只需要按照框架要求,在指定位置上写上逻辑代码即可
为什么要使用Web框架
如果采用成熟、稳健的框架,那么开发者就可以把精力放到写逻辑代码上,况且框架稳定性和可扩展性都很高,能够降低开发难度,提高开发效率
Flask框架
查看URL对应的函数
视图可以返回的数据
1.json数据
2.重定向函数url_for
带有参数的url_for重定向
Jinja2
使用模板的好处
视图用来负责业务逻辑和数据处理
模板用来展示取到的数据结果
结构清晰,耦合度低
模板的使用
{{}} 来表示变量名,这种 {{}} 语法叫做变量代码块
可以直接使用render_template()返回页面
在视图函数中添加对数据库的操作
@app.route("/profile_v5/<user_id>")
def profile_v5(user_id):
# ================= 这里添加新代码 ====================
# 1. 查询数据库
# 1.1 创建Connection连接
conn = pymysql.connect(host='localhost', port=3306, database='flask_1', user='root', password='123456', charset='utf8')
# 1.2 获得Cursor对象
cs1 = conn.cursor()
# 1.3 构造参数列表
params = [user_id]
# 1.4 执行select语句,并返回受影响的行数:查询所有数据
cs1.execute('select * from user where user_id=%s', params)
# 1.5 获取查询的结果
result = cs1.fetchone()
# result = cs1.fetchall()
print(result)
# 1.6 关闭Cursor对象
cs1.close()
# 1.7 闭Connection对象
conn.close()
# 2. 模板渲染
return render_template("profile.html", xxxx=user_id)
if __name__ == '__main__':
app.run()
Flask使用数据库-SQLAlchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer
from sqlalchemy.orm import sessionmaker
# 链接是需要指定要用到的MySQL数据库
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/flask_1?charset=utf8')
Base = declarative_base() # 生成SQLORM基类
class User(Base):
# 对应MySQL中数据表的名字
__tablename__ = 'user'
# 创建字段
id = Column(Integer, primary_key=True)
user_id = Column(String(50), nullable=False)
user_name = Column(String(50), nullable=False)
head_img = Column(String(200))
short_description = Column(String(300))
@app.route("/profile_v8/<user_id>")
def profile_v8(user_id):
# 1. 查询数据库
# 创建session对象
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
session = DBSession() # 生成链接数据库的实例
# 获取返回数据的第一行
obj = session.query(User).filter(User.user_id == user_id).one()
# 关闭session
session.close()
# 2. 模板渲染
return render_template("profile.html", user_name=obj.user_name, head_img=obj.head_img, short_description=obj.short_description)
if __name__ == '__main__':
app.run()