文章目录

  • Flask 教程
  • Flask 邮件(Flask-Mail)
  • Flask Mysql及Flask SQLAlchemy
  • 创建数据表
  • 插入数据
  • 查询


Flask 教程

Flask 邮件(Flask-Mail)

基于web的应用程序通常需要具有向用户/客户端发送邮件的功能。
Flask-Mail扩展使得与任何电子邮件服务器建立简单的接口变得非常容易。
首先,应该在pip实用程序的帮助下安装Flask-Mail扩展。

pip install Flask-Mail
from flask import Flask
from flask_mail import Mail,Message

app=Flask(__name__)

#电子邮件服务器的名称/IP地址
app.config['MAIL_SERVER']='smtp.qq.com'#不同类型邮箱需要更改
#使用的服务器的端口号
app.config['MAIL_PORT']=465#SMTP服务器(端口465或587)
#发件人的用户名
app.config['MAIL_USERNAME']='xxxx@foxmail.com'#填你自己的qq邮箱或foxmail邮箱都行
#发件人的密码
app.config['MAIL_PASSWORD']='xxxx'#使用生成的授权码(邮箱网站的设置里),用密码可能不行
#启用/禁用传输安全层加密
app.config['MAIL_USE_TLS']=False
#启用/禁用安全套接字层加密
app.config['MAIL_USE_SSL']=True
mail=Mail(app)

@app.route("/")
def index():
    #sender:发件人;recipients:收件人
    #Hello是邮件标题
    #msg.body是邮件正文内容
    msg=Message('Hello',sender='xxxx@foxmail.com',recipients=['xxxx@qq.com'])#填你们自己的邮箱,qq邮箱或foxmail邮箱都行
    msg.body="Hello Flask message sent from Flask-Mail"
    mail.send(msg)
    return "Sent"
if __name__=='__main__':
    app.run(debug=True)

进入

http://127.0.0.1:5000 显示Sent,同时邮箱会收到邮件

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_python


这是我的QQ邮箱界面

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_数据_02


这个扩展还挺有意思的

Flask Mysql及Flask SQLAlchemy

pip install pymysql
pip install flask-mysqldb
pip install Flask-SQLAlchemy

创建数据库

登录mysql数据库
mysql -u root -p
create database flask_ex charset=utf8;

创建数据表

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()

app=Flask(__name__)

class Config(object):
    '''配置参数'''
    #设置连接数据库的URL
    user='xxxx'
    password='xxxx'
    database='flask_ex'
    app.config['SQLALCHEMY_DATABASE_URI']='mysql://%s:%s@127.0.0.1:3306/%s' % (user,password,database)
    #设置sqlalchemy自动跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS=True
    #查询时会显示原始SQL语句
    app.config['SQLALCHEMY_ECHO']=True
    #禁止自动提交数据处理
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=False
 
#读取配置
app.config.from_object(Config)
 
#创建数据库sqlalchemy工具对象
db=SQLAlchemy(app)
 
class Role(db.Model):
    #定义表名
    __tablename__='roles'
    #定义字段
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    name=db.Column(db.String(64),unique=True)
    users=db.relationship('User',backref='role')#反推与role关联的多个User模型对象
 
class User(db.Model):
    #定义表名
    __tablename__='users'
    #定义字段
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    name=db.Column(db.String(64),unique=True,index=True)
    email=db.Column(db.String(64),unique=True)
    pswd=db.Column(db.String(64))
    role_id=db.Column(db.Integer,db.ForeignKey('roles.id'))#设置外键

if __name__ == '__main__':
    with app.app_context():
        #删除所有表
        db.drop_all()
        #创建所有表
        db.create_all()

直接运行就行

python demo_SQLAlchemy.py
use flask_ex;

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_flask_03

插入数据

插入数据,更改代码为

if __name__ == '__main__':
    with app.app_context():
        #删除所有表
        db.drop_all()
        #创建所有表
        db.create_all()
        #插入一条角色数据
        role1=Role(name='admin')
        db.session.add(role1)
        db.session.commit()
        #再插入一条角色数据
        role2=Role(name='user')
        db.session.add(role2)
        db.session.commit()

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_flask_04


一次插入多条数据,更改代码为

if __name__ == '__main__':
    with app.app_context():
        #删除所有表
        db.drop_all()
        #创建所有表
        db.create_all()
        #插入一条角色数据
        role1=Role(name='admin')
        db.session.add(role1)
        db.session.commit()
        #再插入一条角色数据
        role2=Role(name='user')
        db.session.add(role2)
        db.session.commit()
        #插入多条角色数据
        user1 = User(name='wang',email='wang@163.com',pswd='123456',role_id=role1.id)
        user2 = User(name='zhang',email='zhang@189.com',pswd='201512',role_id=role2.id)
        user3 = User(name='chen',email='chen@126.com',pswd='987654',role_id=role2.id)
        user4 = User(name='zhou',email='zhou@163.com',pswd='456789',role_id=role1.id)
        db.session.add_all([user1,user2,user3,user4])
        db.session.commit()

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_flask_05


MySQL中是执行多个insert语句逐个插入的

查询

更改代码为(后面不再赘述,改的位置都一样,我直接写代码)

返回名字等于wang的所有user

if __name__ == '__main__':
    with app.app_context():
        u=User.query.filter_by(name='wang').all()
        print(u)

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_User_06

first()返回查询到的第一个对象

User.query.first()
<User 1>

all()返回查询到的所有对象

User.query.all()
[<User 1>, <User 2>, <User 3>, <User 4>]

filter模糊查询,返回名字结尾字符为g的所有数据

User.query.filter(User.name.endswith('g')).all()
[<User 1>, <User 2>]

get(),参数为主键,如果主键不存在没有返回内容

User.query.get(2)
<User 2>
User.query.get(2).name
zhang

逻辑非,返回名字不等于wang的所有数据

[<User 3>, <User 2>, <User 4>]

逻辑与,需要导入and,返回and()条件满足的所有数据

if __name__ == '__main__':
    with app.app_context():
        from sqlalchemy import and_
        u=User.query.filter(and_(User.name!='wang',User.email.endswith('163.com'))).all()
        for i in u:
            print(i.email)
        print(u)
zhou@163.com
[<User 4>]

逻辑或,需要导入or_not_ 相当于取反写法都是一样的,注意先得导入它们

查询数据后删除

if __name__ == '__main__':
    with app.app_context():
        user=User.query.first()
        print('将要被删除的数据:',user)
        db.session.delete(user)
        db.session.commit()
        users=User.query.all()
        print('删除后现在的数据:',users)

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_User_07


更新数据

if __name__ == '__main__':
    with app.app_context():
        user=User.query.first()
        print('更改前的名字:',user.name)
        user.name='li'
        db.session.commit()
        user=User.query.first()
        print('更改后的名字:',user.name)

Python Flask高级编程之从0到1开发鱼书 python flask教程.pdf_python_08


使用update

if __name__ == '__main__':
    with app.app_context():
        User.query.filter_by(name='li').update({'name':'sun'})
        user=User.query.first()
        print('更改后的名字:',user.name)

关联查询

if __name__ == '__main__':
    with app.app_context():
        role1=Role.query.get(1)##查询roles表id为1的角色
        print(role1,'角色的所有用户',role1.users)
        role2=Role.query.get(2)##查询roles表id为2的角色
        print(role2,'角色的所有用户',role2.users)
<Role 1> 角色的所有用户 [<User 4>]
<Role 2> 角色的所有用户 [<User 2>, <User 3>]
if __name__ == '__main__':
    with app.app_context():
        user1=User.query.get(3)##查询users表id为3的用户
        print(user1,'用户所属的角色',user1.role)
<User 3> 用户所属的角色 <Role 2>

呼~终于写完了,晚上十一点半了,睡觉睡觉