安装语句:
pip install flask-wtf
CSRF保护
app = Flask(__name__)
#设置app的config字典app的config字典用来存储框架、扩展和程序本身的配置变量。
app.config['vdsdshidfhuhiuidi'
#第二种添加秘钥方法
app.secret_key='vdsdshidfhuhiuidi'
from wtforms import StringField,PasswordField,SubmitField
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired,EqualTo,Length,NumberRange
#设置表单
class Register(FlaskForm):
#username
username=StringField(label='用户名',validators=[DataRequired()],render_kw={'placeholder':'请输入用户名'})
#password
pwd=PasswordField(label='密码',validators=[DataRequired()],render_kw={'placeholder':'请输入密码'})
#confirm password
cpwd=PasswordField(label='密码',validators=[DataRequired()],)
#submit
submit=SubmitField('提交')
validators指定一个由验证函数组成的列表 。(排除非法输入)
字段类型 | 说 明 |
---|---|
StringField | 文本字段 |
TextAreaField | 多行文本字段 |
PasswordField | 密码文本字段 |
HiddenField | 隐藏文本字段 |
DateField | 文本字段值为datetime.date 格式 |
DateTimeField | 文本字段值为datetime.datetime 格式 |
IntegerField | 文本字段值为整数 |
DecimalField | 文本字段,值为decimal.Decimal |
FloatField | 文本字段,值为浮点数 |
BooleanField | 复选框,值为True 和False |
RadioField | 一组单选框 |
SelectField | 下拉列表 |
SelectMultipleField | 下拉列表,可选择多个值 |
FileField | 文件上传字段 |
SubmitField | 表单提交按钮 |
FormField | 把表单作为字段嵌入另一个表单 |
FieldList | 一组指定类型的字段 |
验证电子邮件地址 | |
---|---|
EqualTo | 比较两个字段的值;常用于要求输入两次密码进行确认的情况 |
IPAddress | 验证IPv4 网络地址 |
Length | 验证输入字符串的长度 |
NumberRange | 验证输入的值在数字范围内 |
Optional | 无输入值时跳过其他验证函数 |
Required | 确保字段中有数据 |
Regexp | 使用正则表达式验证输入值 |
URL | 验证URL |
AnyOf | 确保输入值在可选值列表中 |
NoneOf | 确保输入值不在可选值列表中 |
<form method="post">
{{ form.csrf_token()}}
{{ form.username.label }}{{ form.username }}
{{ form.pwd.label }}{{ form.pwd }}<br>
{{ form.cpwd.label }}{{ form.cpwd }}<br>
{{ form.submit}}
第一种方法:
首先安装(在Ubuntu系统终端下)
pip install flask_migrate
pip install flask_script
main.py
from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager
#数据库种类
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:[email protected]:3306/testdb'
#创建数据库管理对象
db=SQLAlchemy()
manager=Manager(app,db)
manager.add_command('db_command',MigrateCommand)#添加db 命令(runserver的用法)
if __name__ == '__main__':
manager.run()
修改User类。
第二种方法:(该方法在实际应用中并不适用)
db=SQLAlchemy()
if __name__ == '__main__':
db.create_all()
db=SQLAlchemy(app)
if __name__ == '__main__':
db.drop_all()#删除
db.create_all()#加入U
obj1=User(name='小王')
obj2=User(name='小李',email='[email protected]')
obj3=User(name='小张',email='[email protected]')
obj4=User(name='小杨',email='[email protected]')
db.session.add_all([obj1,obj2,obj3,obj4])#添加
db.session.commit()#提交
app.run(debug=True,port=5001)
增加:
user = User(name=’laowang’)
db.session.add(user)
db.session.commit()
修改:
user.name = ‘xiaohua’
db.session.commit()
删除:
db.session.delete(user)
db.session.commit()
查询所有用户数据
User.query.all()
查询有多少个用户
User.query.count()
查询第1个用户
User.query.all()[0]
查询id为4的用户[3种方式]
User.query.get(4)
查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1,3,5,7,9])).all()
查询name为liu的角色数据
user = User.query.filter(User.name == ‘liu’).first()
role = Role.query.filter(Role.id == user.role_id).first()
查询所有用户数据,并以邮箱排序
User.query.order_by(User.email).all()
User.query.order_by(User.email.desc()).all()
注意: __repr __用于返回一个可读性的数据
class User(db.Model):
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(20),unique=True)
is_delete=db.Column(db.Boolean,default=False)
email=db.Column(db.String(30),nullable=True)
def __repr__(self):
#非必须,用于调试或者测试时候,返回具有一个可读性的数据
return self.name