文章目录
- 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
,同时邮箱会收到邮件
这是我的QQ邮箱界面
这个扩展还挺有意思的
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;
插入数据
插入数据,更改代码为
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()
一次插入多条数据,更改代码为
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()
MySQL中是执行多个insert语句逐个插入的
查询
更改代码为(后面不再赘述,改的位置都一样,我直接写代码)
返回名字等于wang的所有user
if __name__ == '__main__':
with app.app_context():
u=User.query.filter_by(name='wang').all()
print(u)
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)
更新数据
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)
使用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>
呼~终于写完了,晚上十一点半了,睡觉睡觉