用户注册
将页面中的用户注册数据
@app.route('/login', methods=['GET','POST'])
if request.method == 'POST':
username = request.form.get('username')#获取用户名
password = request.form.get('password')#获取密码
repassword = request.form.get('repassword')#获取再输一次密码
phone = request.form.get('phone')#获取电话
if password == repassword: #比对密码与再输一次密码
# 与模型结合
# 1、找到模型类并创建对象
user = User() #from apps.User.model import User
# 2、给对象的属性赋值
user.username = username
user.password = password
user.phone = phone
# 添加
# 3、将user对象添加到session中(类似缓存)
db.session.add(user)
# 4、提交数据
db.session.commit()
return '用户注册成功'
else:
return '两次密码不一致'
但是在开发中会进行密码加密通常会用到 hashlib 包用于数据加密,例如md5 sha1 sha256 sha512在采用这些方法时要注意在model中定义密码类型的长度。比如sha256 是64个长度,sha521是128个长度。
hashlib加密是无法逆转的,当在登录的时候我们就只能将用户输入的密码进行加密后在同数据库中的加密密码进行比对,从而进行登录。
import hashlib
msg = 'hello world'
sha1 = hashlib.sha1(msg.encode('utf-8')).hexdigest()
print(sha1)
sha256 = hashlib.sha256(msg.encode('utf-8')).hexdigest()
print(sha256)
sha512 = hashlib.sha512(msg.encode('utf-8')).hexdigest()
print(sha512)
数据查询
总结:
1、User.query.all() 所有数据库中所有符合条件的数据
2、User.query.get() 一个 主键查询
3、User.query.filter() 条件查询
如果要检索的字段是字符串(varchar,db.String):
User.username.startswith(’’)
User.username.endswith(’’)
User.username.contains(’’)
User.username.like(’’)
User.username.in_([’ ‘,’ ‘,’ ‘])
User.username == ‘zzz’
如果要检索的字段是整型或者日期类型
User.age.lt(18)
User.rdatetime.gt(’…’)
User.age.le(18)
User.age.ge(18)
User.age.between(15,30)
多条件查询: and_ , or_ ,not_
排序: order_by()
获取指定数量: limit() offset()
4、User.query.filter_by()
1、模型类.query.all() ~ select * from user;
User.query.filter(User.username.endswith('z')).all() select * from user where username like '%z'
User.query.filter(User.username.startswith('z')).all() select * from user where username like 'z%'
User.query.filter(User.username.contains('z')).all() select * from user where username like '%z%'
2、模型类.query.filter_by(字段名=值)~select * from user where 字段名=值;
模型类.query.filter_by(字段名=值).first()~select * from user where 字段名=值 limit
模型类.query.filter() 里面是布尔的条件 模型类.query.filter(模型名.字段名==值)
模型类.query.filter_by() 里面是一个等值 模型类.query.filter_by(字段名 = 值)
多条件查询
from sqlalchemy import or_,and_,not_
并且:and_ 获取: or_ 非: not_
user_list = User.query.filter(or_(User.username.like('z%')), User.username.contain('i')).all()
# select * from user where username like 'z%' or username like '%i%';
排序:order_by
user_list = User.query.filter(User.username.contains('z')).order_by(-User.rdatetime).all() #先筛选在进行排序
user_list = User.query.order_by(-user.id).all() #对所有的进行排序
注意:order_by(参数):
1、直接是字符串:'字段名' 但是不能倒序
2、填字段名:模型.字段 order_by(-模型.字段) 倒序